虛函數(shù)如果被覆蓋,原來(lái)的函數(shù)是直接被override掉的,也就是這個(gè)函數(shù)沒(méi)了
非虛函數(shù)覆蓋,原來(lái)的函數(shù)還存在,還可以通過(guò)super,索引等方式訪問(wèn)到
類(lèi)似參數(shù)默認(rèn)值機(jī)制,給類(lèi)設(shè)置了一個(gè)默認(rèn)值(默認(rèn)函數(shù))
class A
{
public:
void print(){ printf("A non-virtual\n"); } // 非虛函數(shù)
virtual void printV(){ printf("A virtual\n"); } // 虛函數(shù)
};
class B:public A
{
public:
void print(){ printf("B non-virtual\n"); } // 覆蓋非虛函數(shù)
virtual void printV(){ printf("B virtual\n"); } // 覆蓋虛函數(shù)
};
void main()
{
B b;
b.print();
b.printV();
A*pa = &b;
pa->print();
pa->printV();
}
輸出:
B non-virtual
B virtual
A non-virtual
B virtual