0
在C++中的分層結構中的類重寫在C++中的類
class n1
{
public:
virtual void tt() { cout << "n1" << endl; }
};
class n2:public n1
{
public:
void tt() { cout << "n2" << endl; }
};
class n3:public n2
{
void tt() { cout << "n3" << endl; }
};
int main()
{
n1 *k = new n3;
k->tt();
}
此層次結構在第三類是TT重寫N1虛擬功能或者它被簡單地隱藏N2執行?
在C#中我得到,你可以在層次結構中的任何級別覆蓋最低級別的虛擬方法..但我不知道它是否在C++中是相同的。
Class a
{
virtual void func();
};
class b : a
{
override func()
};
class c : b
{
override func()
};
因此,在一個3類層次A-> B-> C如果A具有虛擬方法和B實現它,它並不意味着從B派生的類將採用已經實現的方法。 –
@ adrian.bercovici更新。 – deW1
@ adrian.bercovici如果使用虛擬調度(或靜態調度到B)調用方法,則將調用B的版本*。當使用靜態調度時,即使在'B'的實例([示例](http://coliru.stacked-crooked.com/a/068cbcb577e090d0))上仍然可以調用A'的版本。這與C#不同,在C#中,繼承和重寫的方法實際上變得對覆蓋它的類進行私有化。 – cdhowie