Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不使用friend类的情况下由另一个类访问类的私有成员_C++_Inheritance - Fatal编程技术网

C++ 如何在不使用friend类的情况下由另一个类访问类的私有成员

C++ 如何在不使用friend类的情况下由另一个类访问类的私有成员,c++,inheritance,C++,Inheritance,假设我们有以下情况: class base{ } class derived1 : public base{ private: void fun(); friend class derived2; } class derived2 : public base{ derived1 ob; void fun2(){ ob->fun(); } 我想在derived2的fun2()中使用derived1的fun(),但不使用friend类并在derived1中保持fu

假设我们有以下情况:

class base{
}

class derived1 : public base{
  private:
  void fun();
  friend class derived2;
}

class derived2 : public base{
  derived1 ob;
  void fun2(){
  ob->fun();
}

我想在derived2的fun2()中使用derived1的fun(),但不使用friend类并在derived1中保持fun()的私密性。

不确定这对您来说是否是一个可行的解决方案,但它是:

class base{
   public:
   virtual void fun() {}
};

class derived1 : public base{
  private:
  void fun() {}
};

class derived2 : public base{
  derived1 ob;
  void fun2(){
  static_cast<base&>(ob).fun();
  }
};
类基{
公众:
虚拟void fun(){}
};
类derived1:公共基{
私人:
void fun(){}
};
派生类2:公共基{
衍生1 ob;
void fun2(){
静态播放(ob.fun();
}
};

保密的关键在于你不应该这样做。