面試遇到C 的重寫 過載 重定義區別

2021-08-19 06:30:46 字數 748 閱讀 6614

面試的時候被問到了:

一、過載(overload)

指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。

(1)相同的範圍(在同乙個作用域中) ;

(2)函式名字相同;

(3)引數不同;

(4)virtual 關鍵字可有可無。

(5)返回值可以不同;

總結:過載函式引數

二、重寫(也稱為覆蓋 override)

是指派生類重新定義基類的虛函式,特徵是:

(1)不在同乙個作用域(分別位於派生類與基類) ;

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有 virtual 關鍵字,不能有 static 。

(5)返回值相同(或是協變),否則報錯;<—-協變這個概念我也是第一次才知道…

(6)重寫函式的訪問修飾符可以不同。儘管 virtual 是 private 的,派生類中重寫改寫為 public,protected 也是可以的

總結:重寫虛函式

三、重定義(也成隱藏)

(1)不在同乙個作用域(分別位於派生類與基類) ;

(2)函式名字相同;

(3)返回值可以不同;

(4)引數不同。此時,不論有無 virtual 關鍵字,基類的函式將被隱藏(注意別與過載以及覆蓋混淆) 。

(5)引數相同,但是基類函式沒有 virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆) 。

總結:重定義非虛函式

C 重寫重載重定義區別

過載overload 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。重寫override 也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 重寫需要注意 1 被重寫的函式不能是static的。必須是vir...

C 重寫重載重定義區別

用的時候老是忘記。特此記下。過載overload 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。重寫override 也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 重寫需要注意 1 被重寫的函式不能是...

C 重寫重載重定義區別

c 重寫重載重定義區別 1 overload 是函式名相同,引數列表不同.過載只是在類的內部存在。但是不能靠返回型別來判斷。成員函式過載特徵 a 相同的範圍 在同乙個類中 b 函式名字相同 c 引數型別 個數不同 d virtual關鍵字可有可無 2 override 也叫做覆蓋。重寫 覆蓋 是指派...