C++深入分析回顧函數(shù)重載
一、函數(shù)重載回顧
- 函數(shù)重載的本質(zhì)為相互獨立的不同函數(shù)
- C++ 中通過函數(shù)名和函數(shù)參數(shù)確定函數(shù)調(diào)用
- 無法直接通過函數(shù)名得到重載函數(shù)的入口地址
- 函數(shù)重載必然發(fā)生在同一個作用域中
二、類中的重載
類中的成員函數(shù)可以進行重載
- 構(gòu)造函數(shù)的重載
- 普通成員函數(shù)的重載
- 靜態(tài)成員函數(shù)的重載
問題:全局函數(shù),普通成員函數(shù)以及靜態(tài)成員函數(shù)之間是否可以構(gòu)成重載?
注意事項
- 重載函數(shù)的本質(zhì)為多個不同的函數(shù)
- 函數(shù)名和參數(shù)列表是唯一的標識
- 函數(shù)重載必須發(fā)生在同一個作用域中
所以類的成員函數(shù)和全局函數(shù)不能構(gòu)成重載,因為全局函數(shù)位于全局的命名空間當中,而成員函數(shù)位于類里面,作用域不一樣。
下面看一個重載的示例:
#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)用沒有參數(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é)果如下:
這個例子展示了類中函數(shù)的重載以及全局函數(shù)的重載,值得多閱讀幾遍!!
三、重載的意義
- 通過函數(shù)名對函數(shù)功能進行提示
- 通過參數(shù)列表對函數(shù)用法進行提示
- 擴展系統(tǒng)中已經(jīng)存在的函數(shù)功能
下面看一個字符串拷貝函數(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ù)之間可以進行重載
- 重載必須發(fā)生在同一個作用域中
- 全局函數(shù)和成員函數(shù)不能構(gòu)成重載關(guān)系
- 重載的意義在于擴展已經(jīng)存在的功能
到此這篇關(guān)于C++深入分析回顧函數(shù)重載的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)班車管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細介紹了C++實現(xiàn)班車管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03C++深入詳解單例模式與特殊類設(shè)計的實現(xiàn)
這篇文章主要為大家詳細介紹了C++單例模式和特殊類的設(shè)計,單例模式這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-06-06C語言數(shù)據(jù)結(jié)構(gòu)二叉樹之堆的實現(xiàn)和堆排序詳解
堆是計算機科學中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將詳細介紹堆的實現(xiàn)和堆排序,需要的可以參考一下2022-04-04