C++深入分析回顧函數(shù)重載
一、函數(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)成重載?
注意事項(xiàng)
- 重載函數(shù)的本質(zhì)為多個(gè)不同的函數(shù)
- 函數(shù)名和參數(shù)列表是唯一的標(biāo)識(shí)
- 函數(shù)重載必須發(fā)生在同一個(gè)作用域中
所以類的成員函數(shù)和全局函數(shù)不能構(gòu)成重載,因?yàn)槿趾瘮?shù)位于全局的命名空間當(dāng)中,而成員函數(shù)位于類里面,作用域不一樣。
下面看一個(gè)重載的示例:
#include <stdio.h>
class Test
{
int i;
public:
Test()
{
printf("Test::Test()\n");
this->i = 0;
}
Test(int i)
{
printf("Test::Test(int i)\n");
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; // 初始化,調(diào)用沒(méi)有參數(shù)的構(gòu)造函數(shù)Test(),輸出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é)果如下:

這個(gè)例子展示了類中函數(shù)的重載以及全局函數(shù)的重載,值得多閱讀幾遍??!
三、重載的意義
- 通過(guò)函數(shù)名對(duì)函數(shù)功能進(jìn)行提示
- 通過(guò)參數(shù)列表對(duì)函數(shù)用法進(jìn)行提示
- 擴(kuò)展系統(tǒng)中已經(jīng)存在的函數(shù)功能
下面看一個(gè)字符串拷貝函數(shù)的重載:
#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 = "AutumnZe";
char buf[8] = {0};
//strcpy(buf, s);
strcpy(buf, s, sizeof(buf)-1);
printf("%s\n", buf);
return 0;
}輸出結(jié)果如下:

四、小結(jié)
- 類的成員函數(shù)之間可以進(jìn)行重載
- 重載必須發(fā)生在同一個(gè)作用域中
- 全局函數(shù)和成員函數(shù)不能構(gòu)成重載關(guān)系
- 重載的意義在于擴(kuò)展已經(jīng)存在的功能
到此這篇關(guān)于C++深入分析回顧函數(shù)重載的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Qt信號(hào)槽與事件循環(huán)的關(guān)系
本文主要介紹了Qt信號(hào)槽與事件循環(huán)的關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
C語(yǔ)言中static與extern關(guān)鍵字的深入解析
在C語(yǔ)言編程中,static和extern是兩個(gè)非常重要的關(guān)鍵字,它們各自有著獨(dú)特的用途,本文將深入探討這兩個(gè)關(guān)鍵字的工作原理、底層實(shí)現(xiàn)機(jī)制以及在實(shí)際開(kāi)發(fā)中的應(yīng)用,感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧2024-09-09
C++實(shí)現(xiàn)打印1到最大的n位數(shù)
這篇文章主要介紹了C++實(shí)現(xiàn)打印1到最大的n位數(shù),并分析了實(shí)現(xiàn)代碼中語(yǔ)句的跳轉(zhuǎn)技巧,需要的朋友可以參考下2014-09-09

