如果我有一個繼承自基類的類,我可以將該基類用作 C 中的變數型別嗎?
class Component {
// Code here
};
class TransformComponent : public Component {
// Code here
};
class Entity {
// Code here
Component *getComponent(Component *searchComponent) {
// Code Here
}
};
正如您在這里看到的,我使用基類“Component”作為回傳型別和變數型別。問題在于用戶可能會輸入“TransformComponent”。我問這個的唯一原因是因為“TransformComponent”類繼承自“Component”類,可能有辦法做到這一點?
<Entity>.getComponent(Component &TransformComponent());
我正在尋找的答案既適用于回傳型別,也適用于變數型別。
uj5u.com熱心網友回復:
絕對地!這是 OOP 的優點之一。TransformComponent 型別的實體化類既是 Component 的實體,也是 TransformComponent 的實體。
如果您有一些回傳組件型別的函式,那么它可以回傳從組件派生的任何類作為組件!如果您稍后想將它作為它的子類參考,您可能必須檢查它的型別然后轉換為它,但是您想要的是絕對可能的,并且您正在做正確的事情。
事實上,在您描述的示例中,如果您正在使用 Component 并且用戶可能會傳遞一個 TransformComponent,則 Component 擁有的所有基本方法和屬性也將由 TransformComponent 擁有。它看起來和感覺起來就像是一個組件,具有作為一個組件的所有好處。
唯一會出現問題的情況是,如果您特別想要訪問 TransformComponent 的功能,并且用戶傳遞了一個 Component。父類不知道子類的東西,因為它不是一個實體,它會為你拋出錯誤。子類建立在基類之上,因此它們具有所有基類的東西,還有更多。基本上,當您的示例被顛倒時,這只是一個問題。
uj5u.com熱心網友回復:
您的Entity.getComponent()方法表明它只關心提供的引數是... 而不是原始類的Component任何專業化,例如。TransformComponent
因此,如果您發現自己撰寫的邏輯實際上關心“這Component可能實際上是一個TransformComponent”,那么“警鐘應該響起”。在類中創建盡可能具體的方法定義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534297.html
標籤:C 功能哎呀变量类型
