29 類中的函式過載

2022-07-20 10:15:10 字數 3149 閱讀 5703

(1)函式過載本質相互獨立的不同函式

(2)c++中通過函式名函式引數確定函式呼叫函式名和引數列表組成唯一的標識

(3)無法直接通過函式名得到

過載函式的入口位址-------過載函式的入口位址不同

(4)函式過載必然發生在同乙個作用域----乙個類內部

【程式設計實驗】類成員函式指標

#include using namespace std;

class test

void print()

};//宣告類成員函式指標

typedef void (test::* pfunc)();

intmain()

——類中成員函式可以進行過載-------關鍵:注意考慮在同乙個作用域

全域性函式、普通成員函式、靜態成員函式能不能構成函式過載???

1 #include2

3class

test

413 test(int i) //

含參建構函式

1418 test(const test& obj) //

拷貝建構函式

1923

24static

void func() //

不含參靜態成員函式 呼叫的時候使用類名test::func();

2528

void func(int i) //

含參成員函式--普通成員函式,呼叫的時候使用物件t1.func(2)

2932

intgeti()

3336

};37

38//

全域性函式void func() 和不含參成員函式static void func() 作用域不同 不屬於過載函式

3940

void func() //

無參全域性函式-----全域性函式位於全域性命名空間

4144

void func(int i) //

帶參全域性函式

4548

49int

main()

50

(1)通過函式名函式功能進行提示

(2)通過引數列表函式用法進行提示

(3)擴充套件系統中已經存在的函式功能

(4)擴充套件其他更多的功能

存在問題:

1 #include2 #include  34

//過載意義分析56

intmain()

7; //

將字串s拷貝到buffer先初始化為0

1011

//strcpy_s(buf, s);

//存在問題-------若buf大小設定不夠,就是發生記憶體越界 char buf[8] = ; 會產生bug

1213

//怎麼處理?

14 strncpy(buf, s, sizeof(buf) - 1); //

將拷貝大小最多設定為sizeof(buf) - 1

15//

但是這樣增加了乙個函式,strncpy還不好記

1617 printf("

%s\n

", buf);

1819

return0;

20}2122 接下來通過函式過載擴充套件strncpy------將之前的strcpy_s擴充套件為三個引數

過載之後:

1 #include2 #include  34

5char* strcpy(char* buf, const

char* str, unsigned int n) //

過載函式69

10int

main()

11; //

將字串拷貝到buffer先初始化為0

14//

若buf大小設定不夠,就是發生記憶體越界 char buf[8] = ; 會產生bug

1516

//strcpy(buf, s);

17 strcpy(buf, s, sizeof(buf) - 1); //

使用函式過載擴充套件了strcpy_s的功能 兩個引數變成三個引數

1819 printf("

%s\n

", buf);

2021

return0;

22 }

(1)類的成員函式之間可以過載

(2)過載必須發生同乙個作用域中全域性函式和成員函式不能構成過載關係

(3)過載意義在於擴充套件已經存在的功能

29 類中的過載函式

函式過載的本質為相互對立的不同函式。c 中通過函式名和函式引數確定函式呼叫,無法直接通過函式名得到過載函式的入口位址,函式過載必然發生在同乙個作用域中。類中的成員函式可以進行過載 建構函式的過載,普通函式的過載,靜態成員的過載。靜態成員函式和普通成員函式能夠成過載,類的成員函式能夠成過載。inclu...

C 29 類中的函式過載

類中的成員函式可以進行過載 問題 全域性函式,普通成員函式以及靜態成員函式直接是否可以構成過載?class test test int i test const test obj static void func void func int i int geti void func void fun...

29 函式過載

函式過載實現原理 編譯器為了實現函式過載,也是預設為我們做了一些幕後的工作,編譯器用不同的引數型別來修飾不同的函式名,比如void func 編譯器可能會將函式名修飾成 func,當編譯器碰到void func int x 編譯器可能將函式名修飾為 func int,當編譯器碰到void func ...