在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
&&表示右值引用