首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中函数的继承

C++中函数的继承
EN

Stack Overflow用户
提问于 2013-05-28 04:39:02
回答 2查看 111关注 0票数 0

你能帮我解决这个问题吗?我有四节课。蜜罐标题:

代码语言:javascript
复制
class Honeypot
{

public:
int getNumberOfInterfaces();
Honeypot (int numberOfInterfaces);
virtual std::string typeHoneypot()=0;
protected:
    int numberOfInterfaces;
};

Honeypot.cpp:

代码语言:javascript
复制
Honeypot::Honeypot(int numberOfInterfaces){
this-> numberOfInterfaces = numberOfInterfaces;
}

int Honeypot::getNumberOfInterfaces(){
return numberOfInterfaces;
}

蜜罐类有两个子类: HoneypotV和HoneypotN。现在,我创建了一个带有neteorkInterfaces编号的对象:

代码语言:javascript
复制
Honeypot* NetworkType::createObject(int res1, int res2, int res3) {
    if (res1 == 1 && res2 == 1 && res3 == 1) {
    HoneypotV p1(3);
    return &p1;
} else {
    HoneypotN p2(3);
    return &p2;
}

在main函数中:

代码语言:javascript
复制
NetworkType select;

Honeypot *p;

p = select.createObject(1,1,1);

cout << p->typeHoneypot() << endl;
cout << p-> getNumberOfInterfaces() << endl;

typeHoneypot()是正确的,但getNumberOfInterfaces()返回值为-858993460,正确值为3。

感谢您的回复。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 05:20:59

如果你想返回对象,你应该动态实例化它:

代码语言:javascript
复制
Honeypot* NetworkType::createObject(int res1, int res2, int res3) {
    if (res1 == 1 && res2 == 1 && res3 == 1) {
    HoneypotV *p1 = new HoneypotV(3);
    return p1;
} else {
    HoneypotN *p2 = new HoneypotN(3);
    return p2;
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-28 04:43:15

你返回了一个指向局部变量的指针,但是当你退出函数时,所有的局部变量都将被销毁,并且指针将引用已经销毁的对象

关于main函数中的代码:您声明了一个指向对象的指针,但尚未对其进行初始化,因此指针指向内存中的某些垃圾桶

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16780271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档