如今,好比我想寫一個具備求和功能的函數。若是是想求整數的和,那麼我就得這麼寫,
安全
int add ( int a, int b ){ cout << " int + int " << endl; return 1; }
這個函數能夠求兩個整數的和。那若是我想求三個整數的和,很明顯我就得重寫一個函數。若是是在C中,我想要再重寫一個求和函數,函數名必然不能跟以前的函數名相同,不然會引發函數名相同的錯誤。爲了解決這樣一個問題,C++中引入了函數名重載這樣的一個概念。什麼是重載呢?函數名相同,函數的參數列表不一樣,(參數列表包括,參數的個數,參數的類型,參數的順序)叫作函數的重載。好比,
ide
參數個數不一樣函數
int add ( int a, int b ){ cout << " int + int " << endl; return 1; } int add ( int a, int b, int c ){ cout << "int + int + int " << endl; return 1; }
參數類型不一樣指針
int add ( int a, int b ){ cout << "int + int " << endl; return 1; } int add ( int a, double b ){ cout << "int + double " << endl; return 1; }
參數的順序不一樣內存
int add ( int a, double b ){ cout << "int + double " << endl; return 1; } int add ( double b, int a ){ cout << "double + int " << endl; return 1; }
那麼可否根據函數的返回值類型來區分重載函數呢?答案是否認的。若是兩個函數,函數名相同,參數列表相同,那麼編譯器就會不知道該去匹配哪個函數,這樣以來一定會形成分歧,因此,函數的返回值類型固然是不能區分重載函數的。編譯器
指針。由於C語言中有指針,因此在C++中仍然保留了指針。好比,
it
int a = 1; int* p = &a; cout << "a = " << *p << endl;
因爲指針容易引發誤用,用很差會帶來一系列的程序安全隱患的問題,因此,C++中用引入了「引用」來取代指針。如何定義一個引用,
編譯
int& p;
引用比指針安全的其中一個因素就是,引用必須初始化,這個指針不一樣,指針定義以後能夠不用初始化,這就致使了容易形成內存泄露。因此,對引用的使用,class
int a = 1; int& b = a;
這樣以來,b就爲a的一個別名。對b的操做,起始就是對a的操做。
引用