构造函数、初始化列表的调用顺序
2015-03-22 20:58
846 查看
#include <iostream>
using namespace std;
class ParentA
{
public:
ParentA()
{
cout << "construct A" << endl;
}
ParentA(const ParentA &pa)
{
cout << "copy construct A " << index << endl;
}
~ParentA()
{
cout << "unconstruct A" << endl;
}
};
class ClassB
{
public:
ClassB(int b)
{
cout << "construct B:"<<b << endl;
}
~ClassB()
{
cout << "unconstruct B" << endl;
}
};
class ChildC:ParentA
{
public:
ChildC() :b1(1),b2(2) //无论 b1(1),b2(2) 的顺序如何调换,对于先构造谁后构造谁没有影响
{
cout << "construct c" << endl;
}
~ChildC()
{
cout << "unconstruct c" << endl;
}
private:
ClassB b2; // 声明 b1,b2 的顺序 直接影响他们初始化的顺序
ClassB b1;
};
void main(char **argv, int arg)
{
ChildC c;
}
输出结果:
construct A //先构造 父类
construct B:2 // 构造成员 ,按照成员声明的顺序 构造 与 构造函数列表中的顺序无关
construct B:1
construct c
unconstruct c
unconstruct B
unconstruct B
unconstruct A
中间 f(x) -> f(
f(x) ) 时,省了一次
using namespace std;
class ParentA
{
public:
ParentA()
{
cout << "construct A" << endl;
}
ParentA(const ParentA &pa)
{
cout << "copy construct A " << index << endl;
}
~ParentA()
{
cout << "unconstruct A" << endl;
}
};
class ClassB
{
public:
ClassB(int b)
{
cout << "construct B:"<<b << endl;
}
~ClassB()
{
cout << "unconstruct B" << endl;
}
};
class ChildC:ParentA
{
public:
ChildC() :b1(1),b2(2) //无论 b1(1),b2(2) 的顺序如何调换,对于先构造谁后构造谁没有影响
{
cout << "construct c" << endl;
}
~ChildC()
{
cout << "unconstruct c" << endl;
}
private:
ClassB b2; // 声明 b1,b2 的顺序 直接影响他们初始化的顺序
ClassB b1;
};
void main(char **argv, int arg)
{
ChildC c;
}
输出结果:
construct A //先构造 父类
construct B:2 // 构造成员 ,按照成员声明的顺序 构造 与 构造函数列表中的顺序无关
construct B:1
construct c
unconstruct c
unconstruct B
unconstruct B
unconstruct A
ParentA f(ParentA u) { ParentA v(u); ParentA w = v; return w; } void main() { ParentA x(1); f(x);// 调用四次 ParentA y = f(f(x));// 只有7次,不是把八次 }
中间 f(x) -> f(
f(x) ) 时,省了一次
相关文章推荐
- 构造函数调用顺序及初始化列表
- C++ 多继承构造函数初始化列表调用顺序
- 构造函数初始化列表中成员列出顺序要和它们在类中声明顺序相同
- 构造函数初始化列表顺序
- C++类构造函数初始化列表顺序
- 构造函数初始化列表执行顺序
- 成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关
- C++类构造函数初始化列表和初始化顺序
- java初始化构造函数调用顺序
- 静态构造函数, 静态成员初始化/调用顺序
- java 构造函数 成员函数初始化顺序 以及多态的构造函数的调用顺序
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- asp.net页面从初始化到卸载事件顺序(及对页面控件调用)完整列表
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- java初始化构造函数调用顺序
- C++复习14 构造函数初始化调用顺序
- java初始化构造函数调用顺序
- java初始化构造函数调用顺序
- C++类的构造函数列表成员初始化的顺序问题
- java初始化构造函数调用顺序