我已经读到“派生类不会继承对私有数据成员的访问。但是,它确实继承了完整的父对象,该对象包含该类声明的所有私有成员。”
但是,在下面的程序中,我可以访问私有数据成员。我在做什么错了?
#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;
}
答案 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