在另一个类中重写虚拟方法以在C ++中访问其成员

时间:2018-06-20 09:17:47

标签: c++ oop inheritance override virtual-method

假设我有两个班级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()。

1 个答案:

答案 0 :(得分:1)

实际上,您无法使用C ++进行尝试(我想也不能使用其他任何语言):您看到,类A和B不共享实例信息。实例化A时,没有B的关联实例,您可以从中获取a值。您也无法将a从B实例“粘贴”到A实例中。

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

  1. 有一个

    class AWithB { A instance_of_A; B instance_of_B; };
    

    (当然,这不是一个很好的选择...)

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

另一种替代方法是让类B从A继承,然后它可以覆盖now_do()