C++ 如果只存在私有函数,则访问基类中的私有数据类型
给出下面的代码,如果基类中的函数使用继承进行保护,我们可以访问基类的私有数据。我的问题是,如果基类中的所有方法都设置为private,我们是否可以访问私有数据C++ 如果只存在私有函数,则访问基类中的私有数据类型,c++,inheritance,private,C++,Inheritance,Private,给出下面的代码,如果基类中的函数使用继承进行保护,我们可以访问基类的私有数据。我的问题是,如果基类中的所有方法都设置为private,我们是否可以访问私有数据 class Base { int i; protected: void set(int data){ i = data; } int get(){ return i; } }; class derive: Base{ public: void change(int x){
class Base
{
int i;
protected:
void set(int data){
i = data;
}
int get(){
return i;
}
};
class derive: Base{
public:
void change(int x){
set(x);
cout<<get()<<endl;
}
};
int main()
{
derive b;
b.change(3);
return 0;
}
类基
{
int i;
受保护的:
无效集(整数数据){
i=数据;
}
int get(){
返回i;
}
};
类派生:基{
公众:
无效更改(int x){
组(x);
cout“如果使用继承保护基类中的函数,我们可以访问基类的私有数据”,不,您没有真正访问私有数据。您正在调用基类中为您执行此操作的setter。而且,不,您将无法调用基类的私有方法。在基类中将成员设置为private也将使其对所有子级都是私有的。您可以定义新的公共函数以在中更改这些成员孩子们。通过使用friend
使派生类成为基的朋友
类派生;//转发声明
阶级基础
{
int i;
私人:
无效集(整数数据){
i=数据;
}
受保护的:
int get(){
返回i;
}
公众:
朋友类派生;
};
类派生:公共基{
公众:
无效更改(int x){
组(x);
coutErr,不,因为没有其他人可以打电话给他们。谢谢你的更正。如果数据和功能都是私有的,那么就没有办法访问私有数据了?我在一次采访中被问到这个问题,我说没有办法。但是从采访者的回答来看,我想有一些棘手的方法来实现它。如果是“诡计问题”虽然有一种方法可以通过在基类定义中添加friend class derive;
来实现,但这纯粹是邪恶的。面试官不应该问“诡计问题”。但是如果他不喜欢你的答案,你应该问他,并对其进行评估。他可能是错的。我从未想过使用friend class derive。谢谢!
class derive : public Base{
public:
Base::set;//this is valid redeclaration within public scope. Now anybody could use derive::set(x)
void change(int x){
set(x);
cout<<get()<<endl;
}
}