2012-02-23 29 views
-1

我遇到了如下所述的情況,並且想要了解其工作原理。我有一個類的構造函數期望另一個類作爲參數。然後在代碼中,我看到的不是將期望的類的對象作爲參數傳遞,而是傳遞了另一個類的對象(該類恰好是預期類的基類)。初始化一個類;而不是將所需的類作爲參數傳遞,而是傳遞該期望類的基類

增加實際代碼:

class s_api { 
public: 
}; 

class PB { 
public: 
    PB (s_api *sa) {} 
}; 

class TValue : public s_api { 
public: 
    TValue() {} 
}; 

int main() { 
    TValue tvl; 
    PB pb(tvl); //tvl is object of class TValue 
} 

這是如何工作的)?

+1

[它不會(http://ideone.com/W5a5M) – 2012-02-23 01:10:20

回答

1

這是多態性的基礎。無論你有什麼需要s_api *(即指向基類的指針),你都可以自由地通過Tvalue *(即指向派生類的指針)。

+0

與真正的代碼 – nulltorpedo 2012-02-23 01:06:32

+0

對不起奧利更新,我取代他的psudocode與實際的代碼(但他psudocode有同樣的問題!) – 2012-02-23 01:07:27