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

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


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