C++类组成,为什么不调用构造函数
C++ class composition,why constructor not called?
我有以下代码,我不明白,为什么在创建对象 b 时,类 A 的构造函数不调用......我会很感激你的一点帮助。
#include <iostream>
using namespace std;
class MyClass
{
int x;
public:
MyClass(int y);
MyClass(MyClass &my)
{
x = my.x;
cout << "My class created by copy" << endl;
}
};
MyClass::MyClass(int y)
{
x = y;
cout << "My class created" << endl;
}
class A {
MyClass k;
public:
A(MyClass &my) : k(my) {
cout << "A created" << endl;
}
};
class B {
A data;
public:
B(A& aa) : data(aa)
{
cout << "B created" << endl;
}
};
int main()
{
MyClass obj(100);
A a(obj);
B b(a);
return 0;
}
执行:
My class created
My class created by copy
A created
My Class created by copy
B created
调用
A
的复制构造函数,而不是您定义的构造函数。由于既没有定义也没有删除它,因此调用了默认构造函数。默认构造函数将调用每个成员变量的复制构造函数;我认为这是按声明顺序排列的。
相关文章:
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- C++:为什么不调用移动构造函数?
- 为什么不调用移动构造函数
- 类继承自QLabel,为什么不调用自定义插槽?
- 为什么不调用预期的函数?我是否对类型特征的理解不正确?
- 为什么不调用虚拟基非默认构造函数,除非大多数派生基显式调用它们?
- 为什么不调用全局静态变量的析构函数
- 为什么不调用模板类中的转换构造函数?
- 为什么不调用基类 2 的构造函数
- 为什么当对象构造函数投入新表达式时,为什么不调用DealLocation函数
- 为什么不调用构造函数?
- 为什么不调用复制构造函数,但在此代码中调用默认构造函数
- 为什么不调用移动构造函数?
- 移动语义,为什么不调用移动构造函数
- 为什么不调用私有成员的默认构造函数
- 为什么不调用这个 Ruby 覆盖方法
- 为什么不调用该函数?C++
- 为什么不调用 std::string move 构造函数?
- 为什么不调用移动构造函数?