c++ - 派生类不调用整个基础构造函数

标签 c++ class constructor derived-class

我确定这只是我犯的一些愚蠢的语法错误,但是当我的派生自 CLimb 的类 CNeck 调用其默认构造函数时,CNeck () 一切都按预期工作。当它调用不同的构造函数时 CNeck(*parent) 它似乎调用了大约一半的指定基本构造函数,然后使用编译器默认构造函数或一些奇怪的东西。

主要.cpp

int _tmain(int argc, _TCHAR* argv[])
{
    CNeck neck01;
    CLimb *ptr;
    ptr = &neck01;
    CNeck neck02(ptr);
    return 0;
}

limb.h(父类)

class CLimb
{
public:
    CLimb(void);
    CLimb(CLimb *_parent);
    ~CLimb(void);

    float cut;
    float bone;
    float resistance;
    //attributes
    bool isBurned;
    bool isBleeding;
    bool isOnFire;
    bool isNeedFirstaid;

    CLimb *parent;
};

limb.cpp(父类)

#include "limb.h"

CLimb::CLimb(void) :
    cut(10),
    bone(10),
    resistance(10),
    //attributes
    isBurned(0),
    isBleeding(0),
    isOnFire(0),
    isNeedFirstaid(0)
{
    parent = NULL;
}

CLimb::CLimb(CLimb *_parent) :
    cut(10),
    bone(10),
    resistance(10),
    //attributes
    isBurned(0),
    isBleeding(0),
    isOnFire(0),
    isNeedFirstaid(0)

{
    parent = _parent;
}

CLimb::~CLimb(void)
{
}

neck.h(子类)

#include "limb.h"
class CNeck :
    public CLimb
{
public:
    CNeck(void);
    CNeck(CLimb *_parent);
    ~CNeck(void);
};

neck.cpp(子类)

#include "Neck.h"


CNeck::CNeck(void)
{
}

CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)
{
}

CNeck::~CNeck(void)
{
}

如您所见,子类除了调用父类的构造函数外没有做任何事情,但是当我单步执行程序时,我得到以下结果:
CNeck neck01;: 正常
CNeck neck02(ptr);:值 cut、bone、resistance 和 isBurned 都有正确的值,但 isBleeding、isOnFire 和 isNeedFirstaid 都等于 1 而不是零。 CNeck::CNeck(*parent) 的主体仍然被执行。
当我测试并调用 CLimb limb(ptr); 而不是 CNeck neck02(ptr); 时,所有值都被分配了正确的值。

最佳答案

CNeck::CNeck(CLimb *_parent) : CLimb(*_parent)

应该是

CNeck::CNeck(CLimb *_parent) : CLimb(_parent)

此外,我真的不明白这是如何编译的:

ptr = &hand;

hand 根本没有声明,但看起来您在复制粘贴代码时错过了它。

关于c++ - 派生类不调用整个基础构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082352/

相关文章:

c++ - 类(Class)关系的设计

c++ - 在类中创建函数的问题

python - 简单的Python继承

java - Autowiring 构造函数是否会导致 Spring 创建该对象的至少一个实例?

Mac 上的 C++ 库无法使用 g++ my_program.cpp -o my_program 进行编译

C++ 类前向声明​​的缺点?

c++ - 为什么 EnumWindows 在服务中不工作?

c# - 试图删除涉及 int 和 long 的构造函数中的不明确调用

c++ - UCHAR 或 WCHAR 用于通信缓冲区

c++ - hash_map 是 STL 的一部分吗?