正文
1. 為什么不要重新定義繼承而來(lái)的非虛函數(shù)——實(shí)際論證
假設(shè)我告訴你一個(gè)類(lèi)D public繼承類(lèi)B,在類(lèi)B中定義了一個(gè)public成員函數(shù)mf。Mf的參數(shù)和返回類(lèi)型并不重要,所以假設(shè)它們都是void。實(shí)現(xiàn)如下:
1 class B {2 public:3 void mf();4 ...5 };6 lass D: public B { ... }
我們不需要了解B,D或者mf的任何細(xì)節(jié),考慮一個(gè)類(lèi)型D的對(duì)象x,
1 D x; // x is an object of type D
你會(huì)感到很吃驚,如果下面的語(yǔ)句:
1 B *pB = &x; // get pointer to x2 3 pB->mf(); // call mf through pointer
同下面的語(yǔ)句行為不一樣
1 D *pD = &x; &n