我正在使用給予我的接口類類來構建二叉搜索樹。我有一個由純虛函數組成的BSTInterface類。它正在由BST.cpp實施的BST.h繼承。 BSTInterface描述了一個名爲getRootNode()的函數,該函數返回一個NodeInterface * My NodeInterface.h是一個由純虛函數組成的類,它由Node.h繼承,由Node.cpp實現。在我的BST :: getRootNode()函數中,我可以返回一個Node *,還是必須返回一個NodeInterface *?如果我必須返回一個NodeInterface *,我可以簡單地設置一個NodeInterface * = Node *?任何幫助理解父母和子女對象之間的關係將不勝感激。非常感謝!可以將指向子對象的指針視爲指向父對象的指針嗎?
回答
特別是你的情況,C++允許covariant return types。這意味着您不僅可以從繼承的方法返回一個派生類類型,但你也可以聲明繼承函數返回devired類型:
class Node {};
class SpecialNode : public Node {};
class Base {
public:
virtual Node* getRootNode() = 0;
};
class Derived : public Base {
public:
virtual SpecialNode* getRootNode() override {
/* return a special node... */
}
};
在一般情況下,你可以派生類型的指針賦給一個指針的基類型:
Node* node = new SpecialNode();
請注意,這隻適用於引用和指針。你不能做同樣的沒有被聲明爲指針或引用的對象:當有足夠的內存只分配給基類出現
void someFunction (Node node) {}
SpecialNode sn;
// Causes "slicing" to occur
someFunction(sn);
切片,因爲編譯器通過它的參數使用的節點參數的類型信息聲明(編譯器只爲Node
分配足夠的內存,而不是SpecialNode
)。如果下面分別宣佈
class Node {
private:
int x;
};
class SpecialNode : public Node {
private:
int y;
};
的「Y」數據成員將不會出現在傳遞給someFunction
節點,因爲它已被「切片」。請注意,這隻發生在傳值參數中,而不是通過引用傳遞或傳遞指針。有關更多信息,請參閱object slicing。
這是超好玩!謝謝一堆。 –
很高興幫助。作爲一個方面說明,引用和指針的工作原理是指針的大小(以及通常由編譯器使用指針實現的引用)在同一臺機器上的大小始終相同。因此,指向基類型的指針與指向派生類型的指針的大小相同。基礎對象和派生對象不能這麼說:基礎對象有一個整數(x),而派生對象有兩個整數(x和y)。這就是指針和引用不會遭受對象分割的根本原因。 –
- 1. 指向const對象的指針自動轉換爲指向對象的指針
- 2. 無效指針指向對象指針
- 3. 設置指向對象的指針,讓對象指向對方
- 4. 指向對象的指針指向C++對象範圍之外
- 5. 刪除指針向量中的指針指向的對象
- 6. 將指針指向功能對象的指針地址
- 7. 傳遞對象指針作爲指向基類的指針
- 8. Cocos2d:可以有指向父級類指針的指針嗎?
- 9. 指向現有對象的指針?
- 10. 指向對象的指針混亂
- 11. 指向對象類型的指針
- 12. S4指針指向C的對象struct
- 13. boost :: gil指向bgr8_view_t對象的指針
- 14. 獲取雙指針指向的對象
- 15. 指向對象開始的指針(C++)
- 16. 解引用指向對象的指針
- 17. C++矢量對象與指向對象的指針的向量
- 18. 如何訪問指向id對象的指針的指針?
- 19. 獲取指向智能指針指向的對象的指針 - Ivalue錯誤
- 20. 將對象加載到指向對象的指針陣列
- 21. 指向類中對象的指針:push_back和指針衝突
- 22. 指針幫助,指向對象的指針和類
- 23. 使用矢量指針指向對象的指針C++
- 24. 刪除指針數組的指針指向對象
- 25. 獲取對象指針指向
- 26. 將指針指向指向指向int的指針的指針指向指向double的指針的指針是正確的嗎?
- 27. 將對象的指針直接存儲在指針向量中?
- 28. 這是將指針指向對象的正確方法嗎?
- 29. C++轉換:有指向對象成員的指針,計算指向對象的指針
- 30. 創建一個指向抽象對象的指針向量
您可以將指向派生類的指針作爲指向基類的指針返回。這是多態性的基礎。 –