转载于:http://blog.csdn.net/liwugang43210/article/details/23451147
- class A
- {
- int a;
- int b;
- int c;
- public:
- A(int aa, int bb) : a(aa), b(bb),c(0) { cout << "aa bb" << endl; }
- A(int aa, int bb, int cc);
- };
上面类中,已经有一个构造函数,形参有两个,我们又重载一个有3个形参的构造函数,为了减少代码量,就想着让3个参数的构造函数调用2个参数的构造函数,然后在执行一些自己的代码,这就如同派生类先调用基类的同名函数,在执行自己特有的代码。这种机制如何实现呢?
做法一:在3个参数中显示调用2个参数的构造函数(这肯定是可以的, 构造函数是类的成员函数),此时要用到placement new技术。
3参数构造函数可以这样实现:
- A::A(int aa, int bb, int cc)
- {
- new (this) A(aa, bb);
- ...
- }
做法二:在VS2013中发现可以在构造函数初始化列表直接调用,类似于调用基类构造函数。该方法在g++中不适合。
- A::A(int aa, int bb, int cc) :A(aa, bb)
- {
- ...
- }
做法二有很大的局限性,不过确实很方便。不知标准文档对于构造函数互相调用有怎样的规定?是否以后其他编译器会加入该功能?