所謂過載,就是重新賦予新的含義。函式過載就是對乙個已有的函式賦予新的含義,使之實現新功能,因此,乙個函式名就可以用來代表不同功能的函式,也就是」一名多用」。
運算子也可以過載。實際上,我們已經在不知不覺之中使用了運算子過載。例如,大 家都已習慣於用加法運算子」+」對整數、單精度數和雙精度數進行加法運算,如5+8, 5.8 +3.67等,其實計算機對整數、單精度數和雙精度數的加法操作過程是很不相同的, 但由於c++已經對運算子」+」進行了過載,所以就能適用於int, float, double型別的運算。
又如」<>「也是位移運算子(右移),但在輸入操作中又是與流物件 cin 配合使用的流提取運算子。這程式設計客棧就是運算子過載(operator overloading)。c++系統對」<>「進行了過載,使用者在不同的場合下使用它們時,作用是不同 的。對」<>「的過載處理是放在標頭檔案stream中的。因此,如果要在程式中用」<>」作流插入運算子和流提取運算子,必須在本檔案模組中包含標頭檔案stream(當然還應當包括」using namespace std「)。
現在要討論的問題是:使用者能否根據自己的需要對c++已提供的運算子進行過載,賦予它們新的含義,使之一名多用。譬如,能否用」+」號進行兩個複數的相加。在c++中不能在程式中直接用運算子」+」對複數進行相加運算。使用者必須自己設法實現複數相加。例如使用者可以通過定義乙個專門的函式來實現複數相加。
[例] 通過函式來實現複數相加。
#include
using namespace std;
class complex //定義complex類
//定義建構函式
compzzovjakdglex(double r,double i) //建構函式過載
complex complex_add(complex &c2); //宣告複數相加函式
void display( ); //宣告輸出函式
private:
double real; //實部
double imag; //虛部
};complex complex::complex_add(complex &c2)
void complex::display( ) //定義輸出函式
{ cout《程式設計客棧out<
執行結果如下:
c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)
結果無疑是正確的,但呼叫方式不直觀、太煩瑣,使人感到很不方便。能否也和整數的加法運算一樣,直接用加號」+」來實現複數運算呢?如
c3=c1+c2;
編譯系統就會自動完成c1和c2兩個複數相加的運算。如果能做到,就為物件的運算提供了很大的方便。這就需要對運算子」+「進行過載。
本文標題: 簡介c++程式設計中的運算子過載
本文位址: /ruanjian/c/131335.html
C 中運算子過載
運算子過載使得使用者自定義的資料以一種更簡潔的方式工作。比如int x,y 可以為y x y 而 my c1,c2 如果想使得兩個自定義的物件相加,以前只能調 用函式計算它們的和。而現在只要定義了運算子過載就能實現c1 c1 c2.所謂過載,就是重新賦予新的含義。函式過載就是對乙個已有的函式賦予新的...
C 中運算子過載
運算子過載可以寫在類的內部,也可以寫成全域性函式形式,其中運算子 在過載時必須宣告為類的成員函式 而運算子 sizeof 不能被過載 演算法運算子的過載不會改變運算子原有的優先順序。例子 include include include using namespace std class comple...
Swift 運算子過載簡介
在任何一門計算機程式語言中,運算子過載都是非常強大的特性之一,因此蘋果決定為 swift 也提供這一機制。然而,能力越強責任越大 利用運算子過載你很容易實現一些奇怪的場景,例如用減法運算子實現兩數相加,或者用乘法運算子實現兩數相除,但這顯然都不是你希望出現的。好了,閒話少敘 讓我們看看運算子過載究竟...