父类的私有成员会不会被子类继承
子类继承了父类的公有成员,保护成员。但私有成员会不会被子类继承呢,如果我将子类定义为父类的友元类,子类能够访问这个私有成员,这个私有成员是父类的,还是子类的呢?
- 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;}