關于什么是重載想必大家都知道,無非就是參數個數不同,參數類型不同可以重載,這里我就不過多介紹啦。
這里想分享C++中一個不一樣的重載,即const重載。
可以看下面的代碼:
struct A {
int count() {
std::cout << "non const" << std::endl;
return 1;
}
int count() const {
std::cout << "const" << std::endl;
return 1;
}
};
int main() {
A a;
a.count();
const A b;
b.count();
}
這段代碼會輸出什么?
?
?
?
?
?
輸出的是這樣:
non const
const
不知道大家平時有沒有關注過這種用法,沒關注過可以繼續向下看哈。

從上面的輸出結果我們也可以看到,const修飾的對象調用的是使用const修飾的方法,非const對象調用的是非const的方法。
然而想必大家都知道對象調用的原理:
看下面的這段代碼:
A a;
a.func();
其實到底層,函數可能會變成這樣:
func(A* a);
函數是在代碼段,對象是在數據段,調用不同對象的函數,其實只不過是同一個函數,傳遞了不同的數據參數而已。
上面的是把對象的this指針傳進去。
再回到上面的代碼:
struct A {
int count() {
std::cout << "non const" << std::endl;
return 1;
}
int count() const {
std::cout << "const" << std::endl;
return 1;
}
};
可以理解為:
int count(A *);
int count(const A*);
咦,這不就是重載嗎,難道還有const重載?
還真有,看下這段代碼:
struct A {
int count(const int& s) {
std::cout << "const" << std::endl;
return 1;
}
int count(int& s) {
std::cout << "non const" << std::endl;
return 1;
}
};
int main() {
A a;
a.count(4);
int c = 5;
a.count(c);
}
輸出如下:
const
non const
所以得出結論:
不只是參數類型和個數不同會產生重載,const修飾的參數也會有重載。
但是只有當const修飾的是指針或者引用類型時才可以,普通的int和const int會編譯失敗的,具體大家可以自己寫代碼試試。
這里大家也可以想想,問什么一定要指針或者引用類型時重載才可以呢?
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C++
+關注
關注
22文章
2123瀏覽量
77110 -
CONST
+關注
關注
0文章
45瀏覽量
8761 -
重載
+關注
關注
0文章
8瀏覽量
2923
發布評論請先 登錄
相關推薦
熱點推薦
數據類型不一樣和接口 怎么解決
要怎么解決接口和產生的數據類型不一樣的問題,然后利用MYRIO的模擬輸出通道接到示波器里面為什么沒有波形啊,數據類型應該是不一樣,要怎么解決這個問題呢?
發表于 05-09 01:00
一樣的c文件但keil的輸出文件不一樣
是一模一樣的啊,還有都能編譯通過和下載,不知道這是什么原因,還有就是我對比發現這兩個工程的輸出文件的有差別,是不是keil沒有設置好導致輸出文件不一樣,進而導致程序運行結果不一樣啊,求高手指點
發表于 03-07 08:26
程序編輯器結果不一樣
有個程序段int i=1;int j=0;j=((i++)*(i++));printf(“%d,%d\n”,i,j);在不同的編輯器結果為什么不一樣 我用虛擬機的VI編輯結果i=3;j=1;用C++編輯結果i=3;j=2;到底結果哪個才正確?迷茫了就指教!謝謝
發表于 03-13 02:22
為什么c語言中a和b的值不一樣,c和d的值不一樣?
];a = sizeof(table1);b = sizeof((u8)table1);c = sizeof(table2);d = sizeof((u32)table2);為什么a和b的值不一樣啊???為什么c和d的值
發表于 09-29 08:50
請問C++ primer和C++primer plus這兩本書有什么不一樣?
如題這兩本書有什么不一樣嗎?望讀過的大神們說說啊?給小弟提個意見,該選哪一本好啊?ps:看了《指針和C》,但是C++基礎一點都沒有。
發表于 10-31 23:13
C++中函數重載的使用
重載,顧名思義從字面上理解就是重復裝載,打一個不恰當的比方,你可以用一個籃子裝蔬菜,也可以裝水果或者其它,使用的是同一個籃子,但是可以用籃子重復裝載的東西
電容容量一樣大小不一樣能用嗎
有時候家里面電器中的電容損壞,很多人很難找到一模一樣的來更換,能找到容量一致的電容器就不容易了,電容容量一樣大小不一樣能用嗎?
電容容量一樣大小不一樣能用嗎?
來儲存電荷,從而形成電荷存儲器、信號濾波器、振蕩器等等。 但是,在實際應用中,我們常常會遇到電容容量大小相同但尺寸大小卻不一樣的情況。那么,電容容量大小相同但尺寸大小不同的電容器可以互相替代嗎?這個問題似乎比較簡單,但
不一樣的展會,不一樣的精彩:2025灣芯展順利收官
內,打造一場"不一樣的展會",呈現出"不一樣的精彩"。本屆展會人氣火爆,展期三天累計接待總量達到11.23萬人次。參展企業集中發布年度新品數約2500件,新品發布與商業合作收獲頗豐。 ? 不一
不一樣的展會,不一樣的精彩 2025灣芯展圓滿收官
10月17日,2025灣區半導體產業生態博覽會(2025灣芯展)在深圳會展中心(福田)圓滿收官。全球600多家展商、超30場論壇,在6萬平方米的展區內,打造一場“不一樣的展會”,呈現出“不一樣的精彩
C++中不一樣的重載是什么
評論