C++ 派生类未调用整个基构造函数
我确信这只是我正在犯的一些愚蠢的语法错误,但是当我的类C++ 派生类未调用整个基构造函数,c++,class,constructor,derived-class,C++,Class,Constructor,Derived Class,我确信这只是我正在犯的一些愚蠢的语法错误,但是当我的类CNeck从gramb派生时,调用它的默认构造函数,CNeck()一切正常。当它调用另一个构造函数CNeck(*parent)时,它似乎调用了指定基构造函数的一半,然后使用编译器默认构造函数或其他奇怪的东西 main.cpp int _tmain(int argc, _TCHAR* argv[]) { CNeck neck01; CLimb *ptr; ptr = &neck01; CNeck neck
CNeck
从gramb
派生时,调用它的默认构造函数,CNeck()
一切正常。当它调用另一个构造函数CNeck(*parent)
时,它似乎调用了指定基构造函数的一半,然后使用编译器默认构造函数或其他奇怪的东西
main.cpp
int _tmain(int argc, _TCHAR* argv[])
{
CNeck neck01;
CLimb *ptr;
ptr = &neck01;
CNeck neck02(ptr);
return 0;
}
limb.h(父类)
limb.cpp(父类)
h级(儿童班)
neck.cpp(儿童级)
正如您所看到的,子类除了调用父类的构造函数之外什么都不做,但是当我逐步执行程序时,我得到了以下结果:CNeck-neck01代码>:正常
CNeck-neck02(ptr)代码>:值cut、bone、resistance和isburn都有正确的值,但是isbleing、isnfire和isneedfirst急救都等于1而不是零。CNeck::CNeck(*parent)的主体仍在执行。
当我在测试和调用攀爬肢体(ptr)时代码>而不是CNeck neck02(ptr)代码>所有值都分配了正确的值
CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
应该是
CNeck::CNeck(CLimb *_parent) : CLimb(_parent)
此外,我真的不明白这是如何编译的:
ptr = &hand;
hand
根本没有声明,但在这里复制粘贴代码时,您似乎错过了它
应该是
CNeck::CNeck(CLimb *_parent) : CLimb(_parent)
此外,我真的不明白这是如何编译的:
ptr = &hand;
hand
完全没有声明,但看起来您在复制粘贴代码时错过了它。您的构造函数被标记为gramb(gramb*\u parent)代码>表示它将指针指向爬升,但在CNeck
构造函数中
CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
您正在取消对指针的引用,该指针调用复制构造函数gramb(gramb&)
。将*\u parent
转换为\u parent
以解决此问题。另外,您可能还需要定义一个复制构造函数
在其他新闻中,不要这样做:
CLimb *ptr;
ptr = &hand;
这样做:
CLimb *ptr = &hand;
避免浪费周期
对于不带参数的函数,您也不需要在参数列表中使用void
(这是C的做法,而不是C++)。例如:
CLimb(void);
CLimb(CLimb *_parent);
~CLimb(void);
应该是
CLimb();
CLimb(CLimb *_parent);
~CLimb();
我知道这与您的问题无关,但它的风格很好。您的构造函数标记为gramb(gramb*\u parent)代码>表示它将指针指向爬升,但在CNeck
构造函数中
CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
您正在取消对指针的引用,该指针调用复制构造函数gramb(gramb&)
。将*\u parent
转换为\u parent
以解决此问题。另外,您可能还需要定义一个复制构造函数
在其他新闻中,不要这样做:
CLimb *ptr;
ptr = &hand;
这样做:
CLimb *ptr = &hand;
避免浪费周期
对于不带参数的函数,您也不需要在参数列表中使用void
(这是C的做法,而不是C++)。例如:
CLimb(void);
CLimb(CLimb *_parent);
~CLimb(void);
应该是
CLimb();
CLimb(CLimb *_parent);
~CLimb();
我知道这与您的问题无关,但它的风格很好。对不起,我已修复复制粘贴错误。对不起,我已修复复制粘贴错误。