C++子类显示调用父类的构造函数
from
http://blog.csdn.net/stone688598/article/details/4436657
2009-08-12 00:04 7469人阅读 评论(2) 收藏 举报 加入有父类是这样定义的: [cpp] view plaincopy class CA { public: CA() { cout << "using ca's constractor/n"; } CA(int k) {cout << "using ca's 2nd constractor, k is " << k << endl; m = k;}; virtual ~CA() { cout << "using ca's disconstractor/n"; } void output() { cout << "the m is " << m << endl; } private: int m; }; 注意A类里面有一个私有成员m. 假设有一个子类是这样定义的: [cpp] view plaincopy class CB : public CA { public: CB(int k) { m = k; } }; 显然是错误的,B类不能够直接访问A类的成员m 这样定义也是错误的: [c-sharp] view plaincopy class CB : public CA { public: CB(int k) { __super::CA((int)k); } }; 这样实际上是在CB(int k)中构造了一个CA类的临时变量实例,函数执行完之后就没有了。如果有: [c-sharp] view plaincopy CB b(2); 执行的结果是: using ca's constractor using ca's 2nd constractor, k is 2 using ca's disconstractor using ca's disconstractor 这说明,先默认的调用CA()构造了一个CB的实例,然后又声明了一个CA (2)的实例。 正确的方法是这样的: [c-sharp] view plaincopy class CB : public CA { public: CB(int k) :CA(k) { } }; 这就是在子类中显示调用父类的构造函数
浙公网安备 33010602011771号