子類函式對父類同名函式的覆蓋

2021-04-20 05:42:31 字數 1275 閱讀 2459

先看一道題:

class

b

void

f(double

) const

};

class

d: public

b

};int

main()

答案:3個呼叫全部呼叫子類的f(void*)。但由於後兩個不能轉換為void*,編譯出錯。void*是可以指向任何型別的指標。c++中,只有int 0可以轉換為指標型,其餘均不可以,所以出錯。

關於子類函式對父類函式的覆蓋:

(引用http://hi.csdn.net/doon的發言)

在c++類裡面,存在兩個概念,乙個是過載,乙個是覆蓋。

過載只是在類的內部存在,不會傳導到父類和子類中間。即便是乙個函式宣告為virtual,也是這樣。

如果乙個類,存在和父類相同的函式,那麼,這個類將會覆蓋其父類的方法,除非你在呼叫的時候,強制轉換為父類型別,否則試圖對子類和父類做類似過載的呼叫是不能成功的。

例如下面的例子

class

b

virtual

void

f(double

d) const

};

class

d: public

b

void

f(int

i) const

};

intmain(

intargc,

char

* argv)

執行結果:

b::f(

int):0

d::f(

int):1

b::f(

int):1

b::f(

double

):0.100000

d::f(

int):0

d::f(

int):0

那麼,對於純虛函式呢,實際情況也是一樣的。例如

class

x

;

class

y:public

x

virtual

void

f(double

d)

};class

z:public

y

};int

main()

執行結果:

z:f(

int):1

z:f(

int):0

C 子類函式對父類同名函式的覆蓋

class b public void f int const cout b.int endl void f double const cout b.double endl class d public b public void f void const cout d.void endl int ...

C 子類和父類同名成員變數或函式

在c 中子類和父類同名成員時候c 版本不同處理的方式也不同。下面是我使用visual c 2015 update 3的測試結果 測試 如下 include using namespace std class base virtual void print base class public base...

PHP 類繼承 子類和父類同名方法會覆蓋

子類可以訪問父類的成員,繼承關鍵字extends,可以 的重用性,子類中寫了乙個與父類同名的方法,這個方法會覆蓋父類中的方法.1 重用性 2 擴充套件性 3 靈活性 類繼承 person.class.php class person public function say public functi...