簡體   English   中英

C ++將繼承的類傳遞給期望基類的函數

[英]C++ Pass inherited class to function expecting base class

我有一個“ D”類,該類具有成員函數“ play”。 游戲應該采用兩個參數,兩個參數均為“ A”類對象。 我還有另外兩個類“ B”和“ C”,它們都從“ A”類繼承(受保護)。 我的程序的結構方式只有一個對象“ B”和另一個對象“ C”傳遞給函數“播放”。 我該如何進行這項工作? 如果傳遞這兩個繼承的對象,則會出現編譯器錯誤:

cannot cast 'B' to its protected base class 'A'

我是否需要將對象轉換回“ A”對象才能將它們傳遞給“播放”對象? 還是可以以某種方式按原樣使用它們?

您可以通過引用傳遞class B class Cclass C class B對象。 例如: void play(A* b,A* c);

因為BC是的子A ,的指針A可以保持物體。 但是您需要聲明要在Class A中的Class D使用的所有BC函數。

如果我正確解釋了您的代碼,並且您的情況如下

struct A {};
struct B : protected A {};
struct C : protected A {};
struct D {
    void play(A a, A b) {}
};

那么您應該公開繼承並在play成員函數中接受const引用 (或reference ),如下所示

struct A {};
struct B : public A {};
struct C : public A {};
struct D {
    void play(A const& a, A const& b) {}
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM