#include <iostream>
using namespace std;
class Base
{
public:
virtual void Func()
{
cout << "\nIn base func";
}
};
class Derived : public Base
{
public:
void Func()
{
cout << "\nIn derived";
}
};
class Derived2 : public Derived
{
public:
void Func()
{
cout << "\nIn derived2";
}
};
int main()
{
Base* lnewbase = new Derived2();
lnewbase->Func();
return 0;
}
作爲一個例子,在上述代碼中,我不想Func鍵()的衍生被繼承(密封在C#),其這就是爲什麼沒有虛擬關鍵字,雖然我知道在這種情況下它不會改變任何東西。有什麼辦法可以禁止這個函數被繼承,同時確保它仍然是一個公共方法嗎?
我認爲你對「繼承」的使用是誤導性的 - 相反,我會說「我可以保留某些函數不會被C++重載」。說「繼承」使我認爲你希望函數不能被子類的實例訪問(你可以通過在子類中聲明它是私有的)來實現該函數。 – 2011-05-31 17:12:23
這是一個危險的編輯,與OP詢問的原始問題有很大不同。我認爲,即使對後者的回答是「不,這是不可能的」,我認爲你可以認爲當他說「繼承」時,OP意味着「覆蓋」。與「密封」類似可能會引起誤解,因爲OP可能只是誤解了在這種情況下「密封」的實際做法。 – eldarerathis 2011-05-31 17:13:33
@愛德華:我認爲這不是誤導。引用你'我希望這個函數不能被子類的實例訪問',但是我不能使它成爲私有的,因爲那麼客戶端將無法訪問它。如果我錯了,請糾正我,但是「超載」的含義與「繼承」或「過度纏身」的含義完全不同? – Samaursa 2011-05-31 17:17:38