C 類中的函式過載

2022-08-18 10:30:16 字數 2822 閱讀 5581

1,本課程最初階段就學習了函式過載,但是那時研究目標僅限於全域性函式,到目前 為止我們學習了三種函式:

1,全域性函式;

2,普通成員函式;

3,靜態成員函式;

這三種不同型別的函式之間是否可以構成過載,這是本文討論的主要內容;

2,函式過載回顧:

1,函式過載的本質為相互獨立的不同函式;

2,c++ 中通過函式名和函式引數確定引數呼叫;

3,無法直接通過函式名得到過載函式的入口位址;

1,如果函式被過載,還需要函式的引數資訊;

4,函式過載必然發生在同乙個作用域中;

3,類中的過載:

1,類中的成員函式可以進行過載:

1,建構函式的過載;

2,普通成員函式的過載;

3,靜態成員函式的過載;

2,全域性函式、普通成員函式以及靜態成員函式之間是否可以構成過載?

4,萬變不離其宗:

1,過載函式本質為多個不同的函式;

1,上述三種函式本質不同;

2,函式名和引數列表是唯一的標識;

1,普通成員函式和靜態成員函式之間可以構成過載;

3,函式過載必須發生在同乙個作用域中;

1,普通成員函式和靜態成員函式在同乙個作用域(不區分記憶體類別)中;

2,類的成員函式和全域性函式不能構成過載,不在同乙個作用域中;

5,類與過載全面分析例項分析:

1,main.cpp 檔案:

1 #include 2

3class

test412

13 test(int

i)14

1819 test(const test& obj) //

三個建構函式之間也構成了過載,這是拷貝建構函式;

2024

25static

void

func()

2629

30void func(int i) //

和上面的靜態成員函式構成過載;

3134

35int

geti()

3639

};40

41void

func()

4245

46void func(int

i)47

5051

intmain()

52

2,輸出結果:

1

void

func()

2void func(int i), i = 1

3test::test()

4 test::test(int

i)5 test(const test&obj)

6void

func()

7void

test::func()

8void func(int i), i = 2

9void test::func(int i), i = 2

10void test::func()

6,過載的深度意義:

1,通過函式名對函式功能進行提示;

1,最大的好處;

2,通過引數列表對函式用法進行提示;

1,真正的意義;

2,**自注釋;

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

1,更高層次的看待函式過載,雖然實質是增加了新的函式;

7,過載的意義分析程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

/*擴充套件 strcpy() 函式的功能 */5

char* strcpy(char* buf, const

char* str, unsigned intn)6

910intmain()11;

1415

//strcpy(buf, s);

//這裡會造成記憶體越界;

16//

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

//最多拷貝 n 個字元,這裡 c 語言中的解決方案不好,增加了新的函式,但是名字讓人費解;

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

);18

19 printf("

%s\n

", buf);

2021

return0;

22 }

2,輸出結果:

d.t.soft

3,過載函式 strcpy(buf, str, n) 的意義:

1,通過函式過載擴充套件了已有的 strcpy(buf, str) 功能,使得它從原來的兩個引數的狀態變成了三個引數,安全性提高了,但是對於開發者而言呼叫的是同乙個函式,並且容易記憶;

8,過載能夠擴充套件系統中已經存在的函式功能,過載是否也能夠擴充套件其他更多的功能?

1,可以,操作符過載;

9,下面複數解決方案是否可行?

1,**示例:

1

class

comples2;

78intmain()9;

11 complex c2 = ;

12 complex c3 = c1 +c2;

1314

return0;

15 }

2,通過過載擴充套件 「+」 的功能,使得它能夠對非實數的複數進行加減;

10,小結:

1,類的成員函式之間可以進行過載;

2,過載必須發生在同乙個作用域中;

3,全域性函式和成員函式不能構成過載關係;

4,過載的意義在於擴充套件已經存在的功能;

類中的函式過載

函式過載回顧 函式過載的本質為相互獨立的不同函式 c 通過函式名和函式引數確定函式呼叫.無法直接通過函式名得到過載函式的入口位址.函式過載必然發生在同一作用域.類中的過載 建構函式的過載 普通成員函式的過載 靜態成員函式的過載 question 全域性函式,普通成員函式以及靜態成員函式之間是否可以構...

類中的函式過載

目錄類的成員函式可以進行過載,包括 注意 函式過載必然發生在同乙個作用域中,因此全域性函式和類的成員函式無法構成過載。過載的意義 include include char strcpy char buf,const char str,unsigned int n int main strcpy bu...

類中的函式過載

函式過載回顧 函式過載的本質為相互獨立的不同函式 c 中通過函式名和函式引數確定函式呼叫 無法直接通過函式名得到過載函式的入口位址 函式過載必然發生在同乙個作用域中 類中的成員函式可以進行過載 建構函式的過載 普通成員函式的過載 靜態成員函式的過載 問題 全域性函式,普通成員函式以及靜態成員函式之間...