運算子過載

2021-09-26 16:22:05 字數 2839 閱讀 2031

運算子過載,就是對已有的運算子重新進行定義,賦予

其另一種功能,以適應不同的資料型別。

能夠過載的運算子

幾乎c中所有的運算子都可以過載,但運算子過載的使用時相當受限制的。特別是不能使用c中當前沒有意義的運算子(例如用**求冪)不能改變運算子優先順序,不能改變運算子的引數個數。這樣的限制有意義,否則,所有這些行為產生的運算子只會混淆而不是澄清寓語意。

以+運算子過載為例

先給出乙個例程然後進行分析

#define  _crt_secure_no_warnings

#includeusing namespace std;

class numbers

numbers(int num1, double num2)

numbers(const numbers & numbers)

~numbers()

//成員函式運算子過載 一元運算子過載

numbers operator+(const numbers & numbers)

};//全域性函式運算子過載,二元運算子過載

numbers operator+(const numbers & numbers1,const numbers & numbers2)

int main()

分析:第乙個運算子過載函式,就是對於+重新進行定義,此中的定義就是,兩個成員變數進行相加,之所以只有乙個引數是因為,第乙個運算子過載函式是乙個物件的成員函式。第二個運算子過載函式,引數列表裡有兩個引數就是因為它不是任何乙個物件的成員函式。

二.自增自減運算子過載

例程:

#define  _crt_secure_no_warnings

#includeusing namespace std;

class myinterger

myinterger & operator++()//前置運算子

myinterger operator++(int)//後置運算子

myinterger & operator--()

myinterger operator--(int)

};ostream & operator<

int main()

後置運算子過載函式格式:

返回的型別 operator++(int)
在本節最前面的例程中注釋前置運算子處,為何返回的是 myinterger & 型別呢?是因為在實際運用中有可能會出現++(++i)的情況,也就是模擬int型別的自加,而後面的注釋後置運算子處為何返回myinterger呢?是因為在前置運算子過載中,出現先使用後增加的情況,所以此處返回值是其原來的值,也就是需要儲存其原來的值,並返回。

例程:

#define  _crt_secure_no_warnings

#includeusing namespace std;

class person

person(int age)

void showage()

~person()

private:

int age; };

class smartpointer

smartpointer(person * person)

~smartpointer()

} person * operator->()//返回乙個指標

person & operator*()//返回乙個物件,用引用返回,就可以直接操作內部的物件,與*指標名,操作相同

private:

person * person; };

int main()

解釋:在注釋中。

注:若前面能夠理解後面的例程自然可以看懂後面不再對**進行贅述

例程:

#define  _crt_secure_no_warnings

#includeusing namespace std;

class myinterger

myinterger(int myint)

bool operator==(const int & i)

bool operator==(myinterger & i)

bool operator!=(const int & i)

bool operator!=(myinterger & i)

int getint()

private:

int myint;

};class add

};int main()

add add;

cout << add(100, 200) << endl;

system("pause");

return exit_success;

}

例程:

#define  _crt_secure_no_warnings

#includeusing namespace std;

class numbers

numbers(int num1, double num2)

};ostream & operator<

int main()

解釋:此處為何要返回ostream 引用呢?,是為了讓呼叫這個做運算子過載後能夠繼續呼叫正常的cout輸出。

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...