C++中不一樣的重載
關於什麼是重載想必大家都知道,無非就是參數個數不同,參數類型不同可以重載,這裏我就不過多介紹啦。
這裏想分享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語言學習聯盟,每日干貨分享
「其他文章」
- 5 分鐘,快速入門 Python JWT 接口認證
- 5 分鐘,教你用 Docker 部署一個 Python 應用!
- uni-app關閉系統側邊滑動返回的方法總彙
- C 中不一樣的重載
- 字節一面:Redis主節點宕機,如何處理?
- 如何使用 Redis 實現 “附近的人” 這個功能?
- 介紹一款能取代 Scrapy 的爬蟲框架 - feapder
- 直觀講解一下 RPC 調用和 HTTP 調用的區別!
- MySQL 億級數據分頁的優化
- Python 多線程小技巧:比 time.sleep 更好用的暫停寫法!
- Python面試官:請説説併發場景鎖怎麼用?
- Python如何異步發送日誌到遠程服務器?
- Python 中的數字到底是什麼?
- 如何建立一個完美的 Python 項目?
- 詳解 Python 的二元算術運算,為什麼説減法只是語法糖?
- Python 為什麼沒有 main 函數?為什麼我不推薦寫 main 函數?
- Bug分析,假刪除導致文章發佈成功卻打不開的問題
- Python 進階:queue 隊列源碼分析
- Python實例篇:自動操作Excel文件(既簡單又特別實用)
- 誰説程序員不懂浪漫,當代碼遇到文學..