【发布时间】:2017-06-16 23:51:17
【问题描述】:
我很难用文字清楚地表达我的想法。下面的例子可以解释我的想法。我有两个抽象类和两个派生类,
class Base1{
public:
virtual void f1() = 0;
std::string get(){ return "HelloWorld";}
};
class Derived1: public Base1{
public:
void f1() {}
void update (std::string& update){
**should call like** Base2::Derived2::update_data(this);}
};
=> 和
class Base2{
public:
virtual void f2 () = 0;
};
class Derived2: public Base2{
public:
void f2() {}
void get (Base1& d1){ d1.Base1::get (); }
void update_data (Base1& d1){ d1.Base1::get (); }
};
=> 类被称为
int main(){
Derived1 d1;
Derived2 d2;
d2.get (d1);
std::string hi = "hiWorld";
d1.update (hi);
return 0;
}
如何在不传递d1.update () 中的Base2 实例的情况下实现**should call like**。
另一个问题是,当每个类对象知道其他对象时,它叫什么?
谢谢。
【问题讨论】:
-
Derived1需要Derived2实例的可见性。假设该实例由名为thing的变量(或数据成员)表示,它可以执行thing.update_data(*this)。这显然依赖于类Derived2在调用点(以及创建thing时)对编译器可见的定义 -
在这种情况下,您希望 Derived1::update() 如何知道要在哪个 Derived2 对象实例上调用 update_data()?
-
您可能应该阅读有关类和对象(或类的实例)之间的差异。它将帮助您了解如何实现您想要的。我还建议您阅读观察者模式,因为这可能是您想要实现的目标。
标签: c++ inheritance abstract-class