sudo apt-get install build-essential
可以通過g++ -v檢視是否安裝成功
int max(int a, int b);
double max(double a , double b);
char* max(char* a, char* b);
Complex operator + ( Complex& lc, Complex& rc)
{
Complex c;
c. real = lc.real + rc.real;
c. img = lc.img + rc.img;
return c;
}
. | .* | :: | ? | sizeof |
---|
= & , && ||
如果不在類中定義賦值操作符過載,則編譯器會自動的合成一個,按照類中定義的順序,按每個成員的賦值操作符依次對每個成員進行賦值。
取地址操作符不需要過載就可以返回類物件的記憶體起始地址。
逗號操作符不需要過載就可以從左至右計算每個表達式的值,並返回最右邊運算元的值。
邏輯與和邏輯或操作符有短路求值的特徵,如果過載則失去短路求值的特徵。
賦值(=)、下標([ ])、呼叫()、成員存取(->)必須定義爲類的成員函數
複合的賦值操作符(+= -+ = /=)優先定義爲成員函數,因爲返回的是左運算元本身
改變物件的狀態或與給定型別緊密聯繫的操作符,如自增、自減,解除參照等單目運算子,優先定義爲成員函數
(2)類的友元函數
輸入操作符>>, 輸出操作符<<必須定義爲類的友元函數
對稱的操作符,如算術操作符,關係操作符,位元運算符等雙目運算子,優先定義成類的友元函數。
關係操作符過載函數必須返回true(非0)或false(0),即bool型別的值
Complex operator + (const Complex& c1,const Complex& c2)
{
Complex sum;
sum.real = c1.real + c2.real;
sum.img = c1.img + c2.img;
return sum;
}
對於既定義了算術操作符又定義了複合賦值操作符的類,優先使用複合賦值實現算術操作,可以不必建立和釋放一個臨時變數儲存算術操作的結果。
bool operator == (const Complex& c1,const Complex& c2)
{
if(c1.real == c2.real && c1.img == c2.img)
return true;
else
return false;
}
Complex& Complex::operator = (const Complex& c1)
{
if(this != &c1)
{
real = c1.real;
img = c1.img;
}
return *this;
}
ostream& operator << ( ostream& out, const Complex & c)
{
out<<「(「<<c.real<<「,」<<c.img<<「)」;
return out;
}
Complex& Complex::operator++() //前置運算
Complex Complex::operator++(int) //後置運算
//定義一個類Abs,這個類封裝將int型別,double型別的物件轉換爲絕對值的操作。用呼叫操作符過載實現。
#include <iostream>
using namespace std;
class Fbs
{
public:
int operator()(int num){
if (num >= 0){
return num;
}else{
return -num;
}
}
double operator()(double num){
if (num >= 0){
return num;
}else{
return -num;
}
}
};
int main(void){
Fbs f;
cout << f(-666) << endl;
cout << f(666) << endl;
cout << f(-666.666) << endl;
return 0;
}
int a = 10;
int &b = a;
b稱爲a的參照,b是a的別名;參照變數b與變數a系結在一起,也叫相關聯。
&表示參照宣告符,不是取地址符;b和a佔同一記憶體儲存單元。
1.定義一個參照時必須同時進行初始化
2.當參照初始化後,只要該參照存在,它就與初始化時指向的物件相關聯,不能將參照關聯到其它物件。
3.參照不是獨立的數據型別,是複合型別,必須使其代表某一型別的物件。
4.可以定義陣列參照
形參具有非參照型別(不論是內建型別還是指針型別),形參複製實參的值。
形參爲指針型別時,形參複製的是指針所指向物件的地址,所以函數內部可以通過對指針的使用,來修改指針所指向物件的值。
形參爲參照型別時,它只是實參的別名,並不是實參的副本。
呼叫函數時,參照形參被建立,並且與相應的實參相關聯,對形參的任何修改其實就是對實參的修改。
在C++中,建議多使用參照作爲函數參數,比指針更方便
需要在函數中改變實參的值
大型的物件(如類物件)作爲實參傳遞時,此時複製物件所需要的時間和空間的代價都較大。
物件無法進行復制時。(比如IO流物件)
函數返回參照型別時,不會複製返回值,返回的是物件本身。
不要返回系結區域性物件的參照,函數呼叫結束,區域性物件被釋放,返回的參照就會指向不確定的記憶體。
不要返回指向棧記憶體的指針,因爲函數呼叫結束,區域性物件被釋放,返回的指針變成了指向不再存在物件的懸垂指針。
定義爲成員函數可以便於編譯器知道是否需要合成一個預設的賦值操作符過載函數
輸出操作符的返回值型別是ostream的參照,是c++標準庫的輸出流類,這樣的目的是表示將輸出流的現狀返回,這樣就可以進行連續的輸出。
因爲成員函數要求第一個運算元必須爲該類的物件