加入有父类是这样定义的:
- 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.
假设有一个子类是这样定义的:
- class CB : public CA {
- public :
- CB(int k) { m = k; }
- };
显然是错误的,B类不能够直接访问A类的成员m
这样定义也是错误的:
- class CB : public CA {
- public :
- CB(int k) { __super::CA(( int )k); }
- };
这样实际上是在CB(int k)中构造了一个CA类的临时变量实例,函数执行完之后就没有了。如果有:
- 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)的实例。
正确的方法是这样的:
- class CB : public CA {
- public :
- CB(int k) :CA(k) { }
- };
这就是在子类中显示调用父类的构造函数