日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

【C++深度剖析教程7】C++之类中的函数重载

發(fā)布時(shí)間:2023/12/10 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++深度剖析教程7】C++之类中的函数重载 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

函數(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)成重載?
下面分析代碼:

#include <stdio.h>class Test {int i; public:Test(){printf("Test::Test()\n");this->i = 0;}Test(int i){printf("Test::Test(int i),i=%d\n",i);this->i = i;}Test(const Test& obj){printf("Test(const Test& obj)\n");this->i = obj.i;}static void func(){printf("void Test::func()\n");}void func(int i){printf("void Test::func(int i),i = %d\n",i);}int getI(){return i;} };void func() {printf("void func()\n"); } void func(int i) {printf("void func(int i),i = %d\n",i); }int main() {func();func(1);Test t; //Test::Test()Test t1(1); //Test::Test(int i)Test t2(t1); //Test(const Test& obj)func(); //void func()Test::func(); //void Test::func()func(2); //void func(int i),i = 2;t1.func(2); //void Test::func(int i),i = 2;t1.func(); //void Test::func()return 0; }

打印結(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é):

  • 類的成員函數(shù)之間可以進(jìn)行重載
  • 重載必須發(fā)生在同一個(gè)作用域中
  • 全局函數(shù)和成員函數(shù)之間不能構(gòu)成重載關(guān)系
  • 重載的意義在于擴(kuò)展已經(jīng)存在的功能
  • 想獲得各種學(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。