2012-04-18 65 views
0

第一:我知道我的問題不是關於父類,而是我不知道如何調用這個結構,我認爲父類最容易描述它。來自父類的調用方法

我有這樣定義了兩個類:)

class class_a { 
    void foo() { 
     //stuff 
    } 
}; 

class class_b { 
    class_a A; 
    void foo() { 
     //more stuff 
    } 
}; 

我想class_b :: FOO(;在class_a :: foo()中滿足某些要求時調用;可以在class_a中設置一個變量並在class_b :: foo()中檢查它。但我想知道是否有更優雅的解決方案。

注意:class_b不能從class_a派生。

+1

爲什麼不直接使用class_b局部變量FOO ::( )? – 2012-04-18 08:34:18

+1

根據「特定需求」存儲函數指針怎麼樣? – Nick 2012-04-18 08:35:10

+2

雖然有解決方法來實現這種行爲這聞起來像一個糟糕的設計..你真的想做什麼? – 2012-04-18 08:39:25

回答

1

不知道我完全理解你正在嘗試做的,更具體的例子將是有益的,但也許這你想要做什麼:

class class_b; 

class class_a { 
    void foo(class_b* b); 
}; 

class class_b { 
    class_a A; 
    void foo() { 
     A.foo(this); 
    } 
    void foo_impl() { 
     // stuff based on requirements in a::foo 
    } 
}; 

void class_a::foo(class_b* b) { 
    //stuff 
    if (conditionsMet()) { 
     b->foo_impl(); 
    } 
} 
+0

我認爲最接近我想要達到的目標。謝謝 :) – Kevin 2012-04-18 09:08:58

0

你可以做的一件事就是創建第三個類,它抽象出這種行爲,無論它來自兩者還是僅僅是獨立的。

0

對於術語,class_b包含,或擁有class_a一個實例。

若要從class_a::foo調用class_b::foo,則需要使class_b的實例可用於class_a::foo。這可以通過向你注意到的class_a添加一個成員變量來實現,或者通過class_a::foo(兩者在兩個類之間創建一個循環依賴關係,這樣可以更好地避免 - 你應該重新考慮你的設計)的一個參數來實現。或者通過一個全局變量(這通常不被推薦,因爲它很難遵循控制流程,進行單元測試等)。