我有一個關於在C++中的虛函數的問題,例如,A
是一個基類,以及類繼承B
A
,和類繼承C
B
,我們可以定義在B
一個虛擬函數,並重新定義它在C
?我的意思是,如果A
這個虛擬函數被定義,因爲A
是所有B
和C
的基類(即B
和C
的根)哪裏可以定義虛擬功能?
3
A
回答
4
並非它不一定是... B是A的專用對象,並且很可能B具有比A更多的特徵。並且如果C被派生出來,它是非常正常具有選自B覆蓋的功能未在A定義
例
- 假設A是一個表格
- 假設B是一個圓...一個圓圈有一個GetDiameter函數,表單沒有。
- 我們假設C是一個橢圓,雖然橢圓沒有實際的直徑,但GetDiameter函數被覆蓋以獲得兩個直徑中「最小」的直徑。
1
是的,這不是問題都沒有 - 試試吧:
class A
{
}
class B : public A
{
public:
virtual void myFunc(): { std::cout << "B here!"; }
}
class C : public B
{
public:
virtual void myFunc(): { std::cout << "No, C here!"; }
}
3
virtual
可以在任何地方的類層次結構中使用,但虛函數只能在子類中重寫(即它不適用於超類)。
struct A {
void funcA();
};
struct B : A {
virtual funcB();
};
struct C : B {
virtual funcB();
};
//....
B* b = new C();
b->funcB(); // calls C's implementation
A* a = new C();
a->funcB(); // fails to compile
相關問題
- 1. 覆蓋虛擬功能到非虛擬功能可以嗎?
- 2. 哪裏可以找到信號和報警功能的定義?
- 3. 我可以在哪裏定義專用功能的主體?
- 4. 哪裏可以定義變量使用功能
- 5. 虛擬功能
- 6. 虛擬功能
- 7. 哪裏把自定義功能在Joomla
- 8. 功能:哪裏可以/必須聲明?
- 9. 哪裏可以放實用功能
- 10. 我可以在哪裏獲得虛擬機在線?
- 11. 在哪裏可以放置虛擬Web服務實現?
- 12. 我在哪裏可以找到創建虛擬主機的GUI?
- 13. Overriden虛擬功能
- 14. C++虛擬功能
- 15. $(SrcDir)可能在哪裏定義?
- 16. _start符號可能在哪裏定義
- 17. 哪裏可以找到CeCreateDatabaseWithProps的定義
- 18. 哪裏可以找到Theme_Material_Light的定義?
- 19. 哪裏可以定義異常類
- 20. 哪裏可以定義錯誤消息
- 21. 定義並訪問cakePHP中的虛擬屬性 - 在哪裏以及如何?
- 22. 哪裏可以搜索特定功能的jQuery插件?
- 23. 虛擬功能與純虛擬功能的區別?
- 24. 虛擬功能常量vs虛擬功能非常量
- 25. 將自定義功能編程爲Verifone或Ingenico - 在哪裏可以找到SDK?
- 26. GPU功能可以影響虛擬機的性能嗎?
- 27. 的boost ::綁定和虛擬功能
- 28. 要求父虛擬功能
- 29. 優勢虛擬功能
- 30. 虛擬功能與回調
'virtual'適用於不是超類的子類。 – 101010 2014-09-04 14:30:45
「重新定義」?你的意思是過載或重載? – Niall 2014-09-04 14:31:02
我的意思是在B和C中實現虛函數是不同的 – ratzily 2014-09-04 14:31:54