首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

父类的私有成员会不会被子类继承,该如何解决

2012-04-19 
父类的私有成员会不会被子类继承子类继承了父类的公有成员,保护成员。但私有成员会不会被子类继承呢,如果我

父类的私有成员会不会被子类继承
子类继承了父类的公有成员,保护成员。但私有成员会不会被子类继承呢,如果我将子类定义为父类的友元类,子类能够访问这个私有成员,这个私有成员是父类的,还是子类的呢?


C/C++ code
class A{//父类Apublic:    friend class B;    A(int a,int b,int c):_a(a),_b(b),_c(c){    }    int _a;protected:    int _b;private:    int _c;};class B:public A{//子类B,这里我使用公有,私有,或者保护继承public:    B(int a,int b,int c):A(a,b,c){    }    void print(){        cout<<_a<<endl<<_b<<endl<<this->_c<<endl;    }};int main(){    B b(1,2,3);    b.print();    return 0;}

问题再描述:我实例化B,B类是从A类派生过来的,A类中有公有成员_a,保护成员_b,私有成员_c。当我实例了B类之后,b中是否有_c这个成员呢? 如果我将B类设为父类A的友元,b能访问到_c,这个_c是不是b自己的成员?

[解决办法]
只要记住,不管是什么继成,子类的成员都不能访问父类的private,要想访问就生为friend;像程序中的_c被继承下来了,但在子类成员是不可见的,加上了friend成为了友元,所以你程序运行正确。
[解决办法]
你这个想法很好啊。你自己应该写一个程序验证一下。
子类确确实实继承了父类的对象成员,如果父类是private成员,那么在子类中访问级别会更高。所以不能继续访问数据成员,如果想访问的话只能用friend。
[解决办法]
从输出大小结果来看,子类是继承父类的所有成员的。只不过子类不能访问父类的私有变量而已!
C/C++ code
#include <iostream>using namespace std;class father{private:    int a[10];};class child : public father{private:    int a[10];};int main(){    father f;    child c;    cout<<sizeof(f)<<endl;    cout<<sizeof(c)<<endl;    return 0;} 

热点排行