c++构造函数
C++ Constructor Oder
考虑以下代码:
#include<iostream>
using namespace std;
class cls
{
public:
cls(int i=0) {cout<<" c1 ";}
~cls() {cout<<" d 1 ";}
};
class cls2
{
cls xx;
public:
cls1(int i=0){cout<<" c2 ";}
~cls1(){cout<<" d2 ";}
}c;
class cls3
{
cls2 xx; cls xxx;
public:
cls2(int i=0) {cout<<" c3 ";}
~cls2(){ cout<<" d3 ";}
};
int main()
{
cls3 s;
return 0;
}
现在,当我运行它,它输出:
c1 c2 c1 c2 c1 c3 d3 d1 d2 d1 d2 d1 d1 d1
,我不明白为什么,在我的脑海里,它应该输出:
c1 c2 c1 c3 d3 d1 d2 d1
因为:
cls2 s -> cls1 xx -> cls xx => c1
=> c2
-> cls xxx => c1
=> c3
我知道在某个地方,我的逻辑是错误的,但我不知道在哪里。
您在这里创建了一个额外的全局实例c
:
class cls1
{
int x; cls xx;
public:
cls1(int i=0){cout<<" c2 ";x=i;}
~cls1(){cout<<" d2 ";}
} c; // <-- here
这个是先创建的
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- 没有用于初始化C++中的变量模板的匹配构造函数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 当从函数参数中的临时值调用复制构造函数时
- 在c++构造函数中使用随机字符串生成器
- 一对向量构造函数:初始值设定项列表与显式构造
- 从构造函数抛出异常时如何克服内存泄漏
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 具有默认模板类型的默认构造函数的类型推导
- 使用dynamic_cast和构造函数时出错
- 在c++中使用向量时,如何调用构造函数和析构函数
- 奇怪的构造函数行为