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)
这通过调用父复制构造函数来解决整个问题
感谢大家的快速回复!
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++中不必要的冗长.