继承对基类私有数据成员的访问(在派生类中继承基类成员函数)
Posted
技术标签:
【中文标题】继承对基类私有数据成员的访问(在派生类中继承基类成员函数)【英文标题】:Inheriting access to private data members of Base class (with Base class member function inherited in Derived class) 【发布时间】:2018-11-21 05:45:45 【问题描述】:我读到“派生类不继承对私有数据成员的访问。但是,它确实继承了一个完整的父对象,其中包含该类声明的任何私有成员。”
但是,在下面的程序中,我可以访问私有数据成员。我做错了什么?
#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
【问题讨论】:
您没有访问A
的私有成员(即int x
);您正在访问公共方法A::printdata()
。 Printdata()
是class A
的成员,所以可以查看私有成员。
但我调用了 obj.B::printdata();
obj.B::printdata()
是 public
。试试cout << obj.x;
看看会发生什么。
【参考方案1】:
您正在使用public member functions
访问private
成员。
这就是你能够访问父类私有数据成员的原因。
x 是私有数据成员,它不适用于子类实例。查看下面的代码以获取更多详细信息
int main()
B obj;
obj.x = 10; //Gives compilation error: 'int A::x' is private
obj.B::printdata();
return 0;
【讨论】:
@LelouchYagami 是的,你违反了安全性。【参考方案2】:你没有做错什么。
根据公共继承的定义,不能从派生类直接访问基类的私有成员,但可以通过调用基类的公共成员和受保护成员来访问。
参考C++继承:https://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm
【讨论】:
以上是关于继承对基类私有数据成员的访问(在派生类中继承基类成员函数)的主要内容,如果未能解决你的问题,请参考以下文章