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 23class
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,輸出結果:
1void
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,**示例:
1class
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 中通過函式名和函式引數確定函式呼叫 無法直接通過函式名得到過載函式的入口位址 函式過載必然發生在同乙個作用域中 類中的成員函式可以進行過載 建構函式的過載 普通成員函式的過載 靜態成員函式的過載 問題 全域性函式,普通成員函式以及靜態成員函式之間...