C++重載&指針&引用

   如今,好比我想寫一個具備求和功能的函數。若是是想求整數的和,那麼我就得這麼寫,
安全

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的操做。
引用

相關文章
相關標籤/搜索