在另一个 class 中覆盖虚方法以访问其在 C++ 中的成员

Overriding virtual method inside another class to access its member in c++

假设我有两个 classes A 和 B。 Class A 是 X 的子 class,具有称为 now_do() 的虚拟方法,因此我可以轻松地用 class A 覆盖它。但是大多数问题都在 class B 中,所以我想在 B 中包含 class A 并将 now_do() 覆盖为 A::now_do(){...} 但这是不可能的,那么我该怎么做才能在内部使用 class B 的变量A::now_do(){}.

代码示例(class B):

#include "A.cpp"

class B{
 public:
 int a;
 //....
 void A::now_do(){
  cout<<a<<endl;    //Access a member of this class B.
 }

};

//But it works when I put outside B class
//However now I can't access members of class B.
void A::now_do(){
  cout<<a<<endl;    //Can't access a member of this class B.
}

我得到的错误是:您不能在 B.

中定义成员函数 A::now_do()

确实,您不能用 C++(我认为也不能用任何其他语言)做您想做的事情:您看,classes A 和 B 不共享实例信息.当您实例化 A 时,没有 B 的关联实例,您可以从中获取 a 值。你也不能 "stick" 你的 a 从 B 实例到 A 实例。

如果您想关联 A 和 B 的实例,您可能需要:

  1. 有一个

    class AWithB { A instance_of_A; B instance_of_B; };
    

    (这当然不是一个好的名字选择...)

  2. 使 now_do() 成为 AWithB 的方法,这样它就可以访问特定于 A 实例和 B 实例的信息

另一种选择是 class B 从 A 继承,然后它可以覆盖 now_do().