父类的私有成员会不会被子类继承,该如何解决
父类的私有成员会不会被子类继承
子类继承了父类的公有成员,保护成员。但私有成员会不会被子类继承呢,如果我将子类定义为父类的友元类,子类能够访问这个私有成员,这个私有成员是父类的,还是子类的呢?
问题再描述:我实例化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
class A{//父类A public: 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; }