概念:函式有同樣的名稱,但是引數列表不相同的情形,這樣的同名不同引數的函式之間,互相稱之為過載函式。
基本條件:
注意:
概念:也稱為覆蓋,子類重新定義父類中有相同名稱和引數的虛函式,主要在繼承關係中出現。
基本條件:
注意:驗證程式:
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
6061
6263
6465
6667
6869
7071
7273
classa;
classb:
publica;
class
cvirtuala*
func2
()// error:靜態函式不能被宣告為virtual,也就沒辦法被重寫。
// static virtual void funcstatic() {}
//由於func3被宣告為private,所以需要通過public函式來呼叫
void
showfunc3
()virtual
void
func4
()private
:virtual
void
func3
()};
classd:
public
c// ok: 當返回值為指標或者引用時,返回值可以是父類返回值型別的子類
virtualb*
func2
()// error: 除上面的情況,返回值型別要和父類一直
/*virtual bool func2() */
// ok: 重寫的函式的訪問修飾符可以不同於被重寫的函式
virtual
void
func3
()private
:// ok: 重寫的函式的訪問修飾符可以不同於被重寫的函式
virtual
void
func4
()};
int_tmain
(int
argc
,_tchar
*argv
)
輸出:
1234
class d: func 1
class d: func 2
class d: func 3
class d: func 4
int func1()將子類void func1()改為 編譯
error: conflicting return type specified for 『virtual int d::func1()』
int func1()
virtual
void
func2
(inta)
};classb:
public
a// 將會重寫(override)父類方法
void
func2
(inta)
// 將會重定義父類的方法
void
func2
(inta,
intb)};
int_tmain
(int
argc
,_tchar
*argv
)
輸出:
123
。class b: func1
class b: func2-1
class b: func2-2
c 之 過載 重寫 重定義
函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被子類名稱覆蓋 過載是在編譯期間根據引數型別和個數決定函式的呼叫 靜態聯編 函式重寫與重定義 重寫 必須發生在基類和派生類之間,並且父類與子類的函式必須有完全相同的函式原型 使用virtual關鍵字宣告之後能夠產生多型 如果不使用...
C 過載重寫重定義
includeusing namespace std 函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被名稱覆蓋 過載是在編譯期間根據引數型別和個數決定函式呼叫 函式重寫 必須發生於父類和子類之間 並且父類和子類中的函式必須有完全相同的原型 使用virtual宣告之後能夠產生多...
C 過載 重寫 重定義
指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。1 相同的範圍 在同乙個作用域中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。5 返回值可以不同 是指派生類重新定義基類的虛函式,特徵是 1 不在同乙個作用域 分別位於派生類與基類 2 函式名字相同...