5
A
回答
5
它可以工作,因爲派生類可以覆蓋基類的私有虛函數,即使基類函數覆蓋了它的基類函數。
這是完全合法的:
class Parent
{
public:
int foo() {return bar();} // the non-virtual public interface
private
virtual int bar();
};
class Child : public Parent
{
private:
virtual int bar(); // overrides Parent::bar()
};
class Grandchild : public Child
{
private:
virtual int bar(); // overrides Child::bar();
};
1
一個基類派生類可自行決定它的工作原理:
你可以通過實現虛函數完全覆蓋該方法。 您可以通過在派生類方法中的某處調用「中間」類函數來擴充該方法。
如果這不是你想要的,你需要在'中間'類中明確地設置它。我不會。如果你發現自己渴望這一點,這可能意味着你沒有給基類足夠的定製點。
相關問題
- 1. 私有繼承和非虛擬接口
- 2. 虛擬繼承和接口
- 3. 從沒有虛擬方法的基類繼承不良習慣?
- 4. 關於C++接口(純虛擬類)/多繼承/虛繼承的設計問題
- 5. systemverilog中的繼承和虛擬接口?
- 6. C++虛擬/非虛鑽石繼承
- 7. 繼承虛擬類和非虛類
- 8. 好習慣?虛擬對象
- 9. 虛擬繼承
- 10. 虛擬繼承
- 11. 虛擬繼承
- 12. 覆蓋C++中的非虛擬繼承
- 13. 非虛擬地使用虛擬繼承函數?
- 14. C++中的虛擬與非虛擬多重繼承
- 15. 非虛擬成員的虛擬和繼承成本?
- 16. 從非虛擬父類虛擬類繼承的正確方式
- 17. C++ - 虛擬繼承
- 18. C++:虛擬繼承
- 19. 多虛擬繼承
- 20. 習慣從類型繼承元類嗎?
- 21. 純虛擬繼承,多繼承和C4505
- 22. C++中的虛擬繼承
- 23. 的在C++虛擬繼承
- 24. 非虛擬接口 - 如何調用正確的虛擬功能
- 25. 通用接口繼承非泛型C#
- 26. 單個虛擬繼承
- 27. 繼承和虛擬方法
- 28. 虛擬繼承查詢
- 29. C++虛擬菱形繼承
- 30. 聯盟虛擬繼承