【C++深度剖析教程7】C++之类中的函数重载
函數(shù)重載的回顧(接上一篇文章):
- 函數(shù)重載的本質(zhì)為相互獨(dú)立的不同的函數(shù)
- C++中通過(guò)函數(shù)名和函數(shù)參數(shù)確定函數(shù)調(diào)用
- 無(wú)法直接通過(guò)函數(shù)名得到重載函數(shù)的入口地址
- 函數(shù)重載必然發(fā)生在同一個(gè)作用域中
類中的成員函數(shù)可以進(jìn)行重載
- 構(gòu)造函數(shù)的重載
- 普通成員函數(shù)的重載
- 靜態(tài)成員函數(shù)的重載
問(wèn)題:全局函數(shù),普通成員函數(shù)以及靜態(tài)成員函數(shù)之間是否可以構(gòu)成重載?
下面分析代碼:
打印結(jié)果為:
void func() void func(int i),i = 1 Test::Test() Test::Test(int i),i=1 Test(const Test& obj) void func() void Test::func() void func(int i),i = 2 void Test::func(int i),i = 2 void Test::func()由打印結(jié)果我們知道;
1.重載函數(shù)的本質(zhì)為多個(gè)不同的函數(shù)
2.函數(shù)名和參數(shù)列表是唯一的標(biāo)識(shí)
3.函數(shù)重載必須發(fā)生在同一個(gè)作用域中
重載的深度意義:
- 通過(guò)函數(shù)名對(duì)函數(shù)功能進(jìn)行提示
- 通過(guò)參數(shù)列表對(duì)函數(shù)用法進(jìn)行提示
- 擴(kuò)展系統(tǒng)中已經(jīng)存在的函數(shù)的功能
下面分析代碼讓我們更加深層次的了解函數(shù)重載的意義:
#include <stdio.h> #include <string.h>int main() {const char* s = "Liuyangyang";char buf[16] = {0};strcpy(buf,s);printf("%s\n",buf);return 0; }打印為:
Liuyangyang上面這段代碼很簡(jiǎn)單,就是一個(gè)拷貝字符串到一個(gè)數(shù)組中的程序,看起來(lái)很簡(jiǎn)單,但是在現(xiàn)在的軟件工程中,這么做還是很容易出錯(cuò)的,因?yàn)楫?dāng)定義的buf大小如果不夠的話,就會(huì)出現(xiàn)內(nèi)存泄露的情況,所以我們需要對(duì)其進(jìn)行修改。
#include <stdio.h> #include <string.h>char* strcpy(char* buf,const char* str,unsigned int n) {return strncpy(buf,str,n); }int main() {const char* s = "Liuyangyang";char buf[8] = {0};//strcpy(buf,s);strcpy(buf,s,sizeof(buf)-1);printf("%s\n",buf);return 0; }打印結(jié)果為:
上面修改后的代碼,將strcpy函數(shù)進(jìn)行重載,加入了一個(gè)參數(shù),里面返回的strncpy是C語(yǔ)言中的庫(kù)函數(shù),有人會(huì)問(wèn)為什么我們不直接用這個(gè)庫(kù)函數(shù)呢,因?yàn)?#xff0c;人們習(xí)慣了strcpy,況且strncpy也不是很好記!
總結(jié):
想獲得各種學(xué)習(xí)資源以及交流學(xué)習(xí)的加我(有我博客中寫(xiě)的代碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關(guān)于嵌入式,操作系統(tǒng),C++語(yǔ)言,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)等技術(shù)問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的【C++深度剖析教程7】C++之类中的函数重载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 员工培训与开发实训心得体会_公司新员工培
- 下一篇: s3c2440移植MQTT