在C++中容許在同一做用域內聲明幾個功能相似的同名函數。也就是說用同一個函數完成不一樣的功能。重載函數是靜態多態性的體現。ios
const
,引用&
,可是const
與*
或&
結合組成複合運算符時會進行區分,下面會進行代碼演示。編譯程序時編譯器會對函數的原始名稱進行名稱修飾
,通過修飾獲得的名稱來表示函數。函數
#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 請按任意鍵繼續. . . */
int value
和 const int value
沒有區別,做爲參數時都不會改變實參的值。不可重載。char *value
和const char *value
是有區別的,前者指向一個字符串變量,後者指向一個字符串常量。可重載。char *value
和char const *value
沒有區別,前者爲字符指針變量,後者爲字符指針常量。做爲參數時都不會改變實參的值。不可重載。int &value
和const int &value
是有區別的,前者指向一個整型變量,後者指向一個整型常量。可重載。int &&value
&&表示右值引用