我有两个班:Age和Animal.
我认为构造函数Age应该被调用两次:
Animal a = Animal(13);a.getAge();(因为Age temp(age);在函数定义中)但是...输出main()是Age constructor!代替Age constructor!Age constructor!,所以看起来这个构造函数只被调用一次(我已经检查过它是在构造Animal对象时被调用的.).为什么?
这是我的代码:
class Age {
private:
int value;
public:
Age(int a) :value(a) { cout << "Age constructor!"; }
};
class Animal {
private:
Age age;
public:
Animal(int a) : age(a) {}
Age getAge() const { Age temp(age); return temp; }
};
void main() {
Animal a = Animal(13);
a.getAge();
}
Run Code Online (Sandbox Code Playgroud)
Age temp(age);
Run Code Online (Sandbox Code Playgroud)
它调用复制构造函数,而不是默认值.因此,编写复制构造函数并向其添加跟踪,如果要查看,则创建该副本.