覆盖另一个类中的虚拟方法以在c ++中访问其成员
Posted
技术标签:
【中文标题】覆盖另一个类中的虚拟方法以在c ++中访问其成员【英文标题】:Overriding virtual method inside another class to access its member in c++ 【发布时间】:2018-06-20 09:17:47 【问题描述】:假设我有两个班级 A 和 B。
A 类是 X 的子类,具有称为 now_do()
的虚拟方法,因此我可以轻松地用 A 类覆盖它。但是大多数问题都在 B 类中,所以我想在 B 中包含 A 类并将 now_do()
覆盖为 A::now_do()...
但这是不可能的,那么我该怎么做才能在A::now_do()
中使用B类的变量。
代码示例(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()。
【问题讨论】:
您是否在 A 类中将 now_do 声明为 virtual。void A::now_do()
在类/命名空间 A 中定义了一个函数 now_do。你已经把它放在了 B 的声明中。去掉 A:: 使其成为 B 的函数跨度>
int a
是B
的公共成员,因此可以从任何地方访问。
B
不继承自 X
或 A
。
@UKMonkey,请注意,B 不是 A 的子类,我只想在 B 中使用 A 的虚方法。
【参考方案1】:
确实,您无法在 C++ 中做您尝试做的事情(我认为也不能使用任何其他语言):您看,A 类和 B 类不共享实例信息。当您实例化 A 时,没有可以从中获取 a
值的 B 的关联实例。您也不能将您的 a
从 B 实例“粘贴”到 A
实例中。
如果您想关联 A 和 B 的实例,您可能需要:
有一个
class AWithB A instance_of_A; B instance_of_B; ;
(这当然不是一个好的名字选择......)
将now_do()
设为AWithB
的方法,这样它就可以访问特定于A
实例和B
实例的信息
另一种选择是让类 B 继承自 A,然后它可以覆盖 now_do()
。
【讨论】:
好的,我会尽力去做的。以上是关于覆盖另一个类中的虚拟方法以在c ++中访问其成员的主要内容,如果未能解决你的问题,请参考以下文章