如何调用父类复制构造函数?

Alz*_*ana 0 c++ inheritance class copy-constructor

我遇到了复制构造函数的继承问题.当我尝试复制一个类时,不会调用父类的复制构造函数.这是一个总结问题的示例程序:

#include <iostream>

//parent class
class cParent
{
    public:
        //parent data
        int iParentData;
        //default constructor
        cParent(void) : iParentData(0) {}
        //copy constructor
        cParent(const cParent& SOURCE) : iParentData(SOURCE.iParentData) {}
};

//child class
class cChild : public cParent
{
    public:
        //child data
        int iChildData;
        //default constructor
        cChild(void) : iChildData(0) {}
        //copy constructor
        cChild(const cChild& SOURCE) : iChildData(SOURCE.iChildData) {}
};

int main()
{
    cChild SourceClass;             //create a class
    SourceClass.iParentData = 10;   //and set some values
    SourceClass.iChildData  = 10;   //
    cChild CopyClass(SourceClass);  //use the copy constructor
    std::cout << "Parent Data: " << CopyClass.iParentData << std::endl; //magic, this is 0
    std::cout << "Child  Data: " << CopyClass.iChildData  << std::endl; //and this is 10
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Parent Data: 0
Child  Data: 10
Run Code Online (Sandbox Code Playgroud)

显然,调用子类的复制构造函数,但父类调用默认构造函数.有没有办法在子类复制构造函数中强制调用父类复制构造函数?

在此先感谢您的帮助 :)

*编辑:

对于每个想要了解的人来说,解决方案很简单:

//copy constructor
cChild(const cChild& SOURCE) : cParent(SOURCE), iChildData(SOURCE.iChildData) {}
Run Code Online (Sandbox Code Playgroud)

这通过调用父复制构造函数来解决整个问题

感谢大家的快速回复!

Che*_*Alf 5

cChild(const cChild& other ) : cParent( other ), iChildData( other.iChildData) {}
Run Code Online (Sandbox Code Playgroud)

您隐式调用了cParent默认构造函数.


顺便说一句,关于符号:

  • 更好地保留ALL UPPERCASE宏符号和那些.这样你就可以避免在读者耳中大喊大叫,并减少无意中文本替换的可能性.

  • 最好避免使用匈牙利语前缀表示法.特别是为类名添加前缀c只会使代码的可读性降低.微软这样做是因为他们通常采用各种最差的做法(void main等等),但我们可以做得更好!

  • 写作(void)表示没有参数是C-ism,C++中不必要的冗长.