C++ 如果只存在私有函数,则访问基类中的私有数据类型

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){

给出下面的代码,如果基类中的函数使用继承进行保护,我们可以访问基类的私有数据。我的问题是,如果基类中的所有方法都设置为private,我们是否可以访问私有数据

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