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) { }  
};  

这就是在子类中显示调用父类的构造函数

posted on 2012-10-27 14:50  Orz..  阅读(1222)  评论(0)    收藏  举报

导航