为什么类对象构造函数在用另一个对象的副本初始化时不起作用?
class Human
{
int No;
public:
Human(int arg):No(arg)
{
cout<<"constructor Works"<<endl;
}
};
int main()
{
Human a{10}; // constructor Works for object a
Human b{a}; //why b object's constructor dont work?
}
答案 0 :(得分:8)
您需要一个复制构造函数,否则编译器将生成一个(不输出任何内容)。添加:
Human(const Human& h):No(h.No) { std::cout << "copy-ctor" << std::endl; }
答案 1 :(得分:4)
“不工作”是不是说运行代码后屏幕没有输出?当然,没有 - Human b{a}
调用与Human a{10}
完全不同的构造函数。它调用编译器生成的 copy-constructor ,其签名为:
Human(Human const& other)
如果您希望在复制构造时输出,只需创建自己的:
class Human
{
// ...
Human(Human const& other)
: No{other.No}
{
std::cout << "copy-constructor\n";
}
};