在另一个 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 的实例,您可能需要:
有一个
class AWithB { A instance_of_A; B instance_of_B; };
(这当然不是一个好的名字选择...)
使 now_do()
成为 AWithB
的方法,这样它就可以访问特定于 A
实例和 B
实例的信息
另一种选择是 class B 从 A 继承,然后它可以覆盖 now_do()
.
假设我有两个 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 的实例,您可能需要:
有一个
class AWithB { A instance_of_A; B instance_of_B; };
(这当然不是一个好的名字选择...)
使
now_do()
成为AWithB
的方法,这样它就可以访问特定于A
实例和B
实例的信息
另一种选择是 class B 从 A 继承,然后它可以覆盖 now_do()
.