C++基礎 學習筆記四:重載之函數重載

C++基礎 學習筆記四:重載之函數重載

什麼是函數重載

在C++中容許在同一做用域內聲明幾個功能相似的同名函數。也就是說用同一個函數完成不一樣的功能。重載函數是靜態多態性的體現。ios

函數重載的特色

  1. 形式參數(指參數的個數、類型或者順序)必須不一樣。函數返回值類型能夠相同也可不一樣。
  2. 匹配函數時並不區分const,引用&,可是const*&結合組成複合運算符時會進行區分,下面會進行代碼演示。
  3. 避免了命名空間的污染

函數重載的實現原理

編譯程序時編譯器會對函數的原始名稱進行名稱修飾,通過修飾獲得的名稱來表示函數。函數

函數重載的使用例子

#include<iostream>

using namespace std;

class Printer
{
	private:
		int inkVolume;
		char printerType;
	public:
		Printer():inkVolume(0),printerType('Z')
			{cout << "print by none-arg function" <<endl;}
			
		Printer(int vol):inkVolume(vol),printerType('Z')
			{cout << "print by 1-arg function" <<endl;}
			
		Printer(int vol, char type):inkVolume(vol),printerType(type)
			{cout << "print by 2-arg function" <<endl;}
			
		//void print(int value){cout << value << " print by function #1" <<endl;}//#1
		
		void print (int value) const {cout << value << " print by const function #2" <<endl;}//#2
		
		void print(int &value){cout << value  << " print by function #3" <<endl;}//#3
		
		void print(const int &value){cout << value  << " print by function #4" <<endl;}//#4
		
		void print(int &&value){cout << value  << " print by function #5" <<endl;}//#5
		
		//int print(int value){cout << value  << " print by function #6" <<endl;return 0;}//#6僅返回值不一樣,編譯不經過
		
		//void print(const int value){cout << value  << " print by function #7" <<endl;}//#7
		
		//void print(int value, int value2 = 1){cout << value << value2  << " print by function #8" <<endl;}//#8默認參數在後 
			
		void print(float value){cout << value  << " print by function #9" <<endl;}//#9
		
		void print(char value){cout << value  << " print by function #10" <<endl;}//#10
		
		void print(char* value){cout << *value  << " print by function #11" <<endl;}//#11
		
		void print(const char* value){cout << *value  << " print by function #12" <<endl;}//#12
		
		//void print(char* const value){cout << value  << " print by function #13" <<endl;}//#13
};

int main()
{
	Printer printer1;
	Printer printer2(123);
	const Printer printer3(123,'A');
	
	int intValue = 123;
	const int c_intValue = 1234;
	float floatValue = 1.1;
	char charValue = 'A';
	char* p_charValue = new char('B');
	const char* cp_charValue = new char('C');
	
	
	//printer1.print(1);//1 是 當即數常量 能夠調用#1,#4,#5 ,#2(當且僅當僅存在#2時) 
	printer3.print(1);//只調用 #2
	printer1.print(intValue);//#3 
	printer1.print(c_intValue);//#4 
	printer1.print(1+1);//#5 
	printer1.print(floatValue);//#9
	printer1.print(charValue);//#10 
	printer1.print(p_charValue);//#11
	printer1.print(cp_charValue);//#12
	
    return 0;
}
/* 運行結果爲: 
print by none-arg function
print by 1-arg function
print by 2-arg function
1 print by const function #2
123 print by function #3
1234 print by function #4
2 print by function #5
1.1 print by function #9
A print by function #10
B print by function #11
C print by function #12

--------------------------------
Process exited after 0.09048 seconds with return value 0
請按任意鍵繼續. . .
*/

代碼分析

  1. int valueconst int value沒有區別,做爲參數時都不會改變實參的值。不可重載。
  2. char *valueconst char *value是有區別的,前者指向一個字符串變量,後者指向一個字符串常量。可重載。
  3. char *valuechar const *value沒有區別,前者爲字符指針變量,後者爲字符指針常量。做爲參數時都不會改變實參的值。不可重載。
  4. int &valueconst int &value是有區別的,前者指向一個整型變量,後者指向一個整型常量。可重載。
  5. int &&value&&表示右值引用
相關文章
相關標籤/搜索