继承对基类的私有数据成员的访问权限(基类成员函数在派生类中继承)

时间:2018-11-21 05:45:45

标签: c++ inheritance

我已经读到“派生类不会继承对私有数据成员的访问。但是,它确实继承了完整的父对象,该对象包含该类声明的所有私有成员。”

但是,在下面的程序中,我可以访问私有数据成员。我在做什么错了?

#include <iostream>
using namespace std;

class A
{
    private:
    int x;
    public:
    void printdata()
    {
       cout<<"x="<<x<<endl; 
    }
};

class B:public A
{
};

int main() 
{
    B obj;
    obj.B::printdata();

    return 0;
}

Link to Program

2 个答案:

答案 0 :(得分:0)

您正在使用private访问public member functions成员。

这就是您能够访问父类私有数据成员的原因。

x是私有数据成员,并且不适用于子类实例。检查下面的代码以获取更多详细信息

int main() 
{
    B obj;
    obj.x = 10; //Gives compilation error: 'int A::x' is private
    obj.B::printdata();

    return 0;
}

答案 1 :(得分:0)

您没有做错任何事情。

根据公共继承的定义,不能直接从派生类访问基类的私有成员,而可以通过对基类的公共成员和受保护成员的调用来访问。

请参阅C ++继承:https://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm