我很難用文字清楚地將我的想法可視化。下面的例子可以解釋我的想法。我有兩個抽象類和兩個派生類,每個抽象類都知道別人
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;
}
我怎樣才能實現**should call like**
不及格d1.update()
中的Base2
實例。
另一個問題是,當每個類對象知道其他對象時,它會調用什麼?
謝謝。
'Derived1'需要知道'Derived2'的實例。假設該實例由名爲'thing'的變量(或數據成員)表示,則它可以執行'thing.update_data(* this)'。這顯然依賴於在調用點編譯器可見的類Derived2'的定義(以及創建'thing'時) – Peter
您如何期望Derived1 :: update()知道Derived2對象的哪個實例要調用update_data( ),在這種情況下? –
您可能應該閱讀有關類和對象(或類的實例)之間的差異。它會幫助你理解如何達到你想要的。我還建議你閱讀關於觀察者模式,因爲它可能是你想要達到的目標。 – Logman