委拖构造函数可以解决什么呢?为什么要新增?
如果给类提供了多个构造函数,可能会重复编写相同的代码。简单的讲就是,有些构造函数可能需要包含其它构造函数中已有的代码。
为了让编程工作更简加简单、更可靠,C++11就用委托构造函数来处理刚讲的事情。
委托构造函数:就是一个构造函数定义中使用另一个构造函数。
为什么叫委托,因为构造函数暂时将创建对象的工作委托给另一个构造函数。其实跟现实生活中一样,就像我委托别人帮我办件事一样。
委托构造函数测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//梁笔记 //zouzhongliang.com #include <iostream> using namespace std; class Test { private: int a; int a2; double b; public: Test(int a_,int a2_,double b_) :a(a_), a2(a2_), b(b_){ cout<<"调用Test(int a_,int a2_,double b_)"<<endl; } Test() :Test(1,2,3.0){ cout<<"调用Test()"<<endl; } Test(int a_) :Test(a, 3, 2.8){ cout<<"调用Test(int a_)"<<endl; } Test(int a_,int a2_) :Test(a_,a2_,3.0){ cout<<"调用Test(int a_,int a2_)"<<endl; } }; int main() { Test test1(1,2,3.0); cout<<endl; Test test2; cout<<endl; Test test3(1); cout<<endl; Test test(1,2); cout<<endl; system("pause"); return 0; } |
委托构造函数代码测试结果:
1 2 3 4 5 6 7 8 9 10 |
调用Test(int a_,int a2_,double b_) 调用Test(int a_,int a2_,double b_) 调用Test() 调用Test(int a_,int a2_,double b_) 调用Test(int a_) 调用Test(int a_,int a2_,double b_) 调用Test(int a_,int a2_) |
从测试结果可以看出,构造函数先调用了委托构造函数,再执行自己的函数体。