【发布时间】:2021-11-22 21:10:19
【问题描述】:
根据我的理解,我知道当一个对象被实例化时,一个构造函数会被调用一次。但是我不明白为什么两个构造函数都被调用并且只实例化了一个对象
#include <iostream>
using namespace std;
#define print(me) cout << me << endl;
class A
{
public:
A() { print("default called"); }
A(int x) { print("paramterized called"); }
};
int main()
{
A a;
a = A(10);
return 0;
}
我得到了输出: 默认调用 参数化调用
【问题讨论】:
-
A a;调用默认构造函数。 -
A a;没有指定构造函数,所以调用了默认的(没有参数的)。 -
您应该打印
this的值而不仅仅是消息。然后你会意识到构造函数是为不同的对象调用的,而不是同一个对象。但是使用不明智的print宏,您将无法做到这一点。直接在构造函数中使用std::cout,不要用print之类的宏来混淆代码。 -
完全按预期工作!构造函数1:A a;构造函数二 A(10);
-
如果你提供了一个打印赋值操作符,你会看到它也被调用了
标签: c++ class oop constructor