它的確定,具有共享功能
:
class A
{
virtual x() = 0;
virtual y() = 0;
}
class B
{
virtual x() = 0;
virtual z() = 0;
}
class C : A , B
{
x();
y();
z();
}
與兩個庫,其一個僅知道A和另一個的共享類C的實例只知道B?
像:
庫1:
#include <a>
A* a = function_in_the_core_that_creates_a_C_and_retrieves_it();
a->x();
a->y();
庫1:
#include <b>
B* b = function_in_the_core_that_creates_a_C_and_retrieves_it();
b->x();
b->z();
我問這個,因爲我不知道如果編譯器都會有問題要解決,因爲該功能圖書館沒有C的祖先的全部知識。
編輯:
function_in_the_core_that_creates_a_C_and_retrieves_it()應該返回一個C *不是C.我認爲這是明顯的,因爲我們正在談論虛函數。
當我說:「共享類C的實例」,我的意思是返回一個C *。我的問題是,如果由核心返回一個C *,每個庫都會找到他們想要的函數,因爲他們對C沒有任何瞭解。 – user246100 2012-02-27 13:05:11
這是行不通的。你需要提供'C'的完整定義才能返回一個指針。如果你返回一個只是向前聲明的'C *',它將不會運行,並且你將無法安全地將它轉換爲'A'或'B'。它或者是一個'C'實現,或者是寫兩個函數分別返回'A'或'B'。 – Dervall 2012-02-27 13:09:49
要清楚的是,如果您提供'C'的前向聲明或完整聲明,則只能返回指向'C'的指針。前向聲明將轉換爲B或A是非法的。 – Dervall 2012-02-27 13:12:16