C++深入分析回顧函數(shù)重載
一、函數(shù)重載回顧
- 函數(shù)重載的本質為相互獨立的不同函數(shù)
- C++ 中通過函數(shù)名和函數(shù)參數(shù)確定函數(shù)調用
- 無法直接通過函數(shù)名得到重載函數(shù)的入口地址
- 函數(shù)重載必然發(fā)生在同一個作用域中
二、類中的重載
類中的成員函數(shù)可以進行重載
- 構造函數(shù)的重載
- 普通成員函數(shù)的重載
- 靜態(tài)成員函數(shù)的重載
問題:全局函數(shù),普通成員函數(shù)以及靜態(tài)成員函數(shù)之間是否可以構成重載?
注意事項
- 重載函數(shù)的本質為多個不同的函數(shù)
- 函數(shù)名和參數(shù)列表是唯一的標識
- 函數(shù)重載必須發(fā)生在同一個作用域中
所以類的成員函數(shù)和全局函數(shù)不能構成重載,因為全局函數(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; // 初始化,調用沒有參數(shù)的構造函數(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; }
輸出結果如下:
這個例子展示了類中函數(shù)的重載以及全局函數(shù)的重載,值得多閱讀幾遍!!
三、重載的意義
- 通過函數(shù)名對函數(shù)功能進行提示
- 通過參數(shù)列表對函數(shù)用法進行提示
- 擴展系統(tǒ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; }
輸出結果如下:
四、小結
- 類的成員函數(shù)之間可以進行重載
- 重載必須發(fā)生在同一個作用域中
- 全局函數(shù)和成員函數(shù)不能構成重載關系
- 重載的意義在于擴展已經存在的功能
到此這篇關于C++深入分析回顧函數(shù)重載的文章就介紹到這了,更多相關C++函數(shù)重載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C語言數(shù)據結構二叉樹之堆的實現(xiàn)和堆排序詳解
堆是計算機科學中一類特殊的數(shù)據結構的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據結構所設計的一種排序算法。本文將詳細介紹堆的實現(xiàn)和堆排序,需要的可以參考一下2022-04-04