操作符過載

2021-06-23 04:26:40 字數 2900 閱讀 4058

文章**

在前一節中曾提到過,c++中執行時的多型性主要是通過虛函式來實現的,而編譯時的多型性是由函式過載和運算子過載來實現的。這一系列我將主要講解c++中有關運算子過載方面的內容。在每乙個系列講解之前,都會有它的一些基礎知識需要我們去理解。而運算子過載的基礎就是運算子過載函式。所以今天主要講的是運算子過載函式。

1.運算子過載是對已有的運算子賦予多重含義,使同乙個運算子作用域不同型別的資料導致不同行為的發生。比如

int i;

int i1=10,i2=10;

i=i1+i2;

std::cout<

class complex //複數類

}

假如我們建立兩個複數,並用"+"運算子讓它們直接相加:

1 complex com1(10,10),com2(20,20),sum;

2 sum=com1+com2;

那麼會提示沒有與這些運算元匹配的 "+" 運算子的錯誤。這是因為complex類型別不是預定義型別,系統沒用對該型別的資料進行加法運算子函式的過載。c++就為運算子過載提供了一種方法,即

運算子過載函式。其函式名字規定為

operator後緊跟過載運算子。比如:operator+(),operator*()等。現在我們給上述程式宣告乙個加法運算子的過載函式用於完成複數的加法運算:

#include "stdafx.h"

#include class complex //複數類

};complex operator+(complex com1,complex com2)//運算子過載函式

int main()

friend complex operator+(complex com1,complex com2);//友元函式過載雙目運算子+

void showsum();

};complex operator+(complex com1,complex com2)//友元運算子過載函式

void complex::showsum()

friend voidoperator++(point& point);//友元函式過載單目運算子++

void showpoint();

};voidoperator++(point& point)//友元運算子過載函式

void point::showpoint()

complex operator+(complex com1);//成員函式過載雙目運算子+

void showsum();

};complex complex::operator+(complex com1)

void complex::showsum()

voidoperator++();//成員函式過載雙目運算子++

void showpoint();

};void point::operator++()

void point::showpoint()

complex operator+(int x);

};complex complex::operator+(int x)

int main()

如果我們把上述main()主函式實現部分裡的total=com1+5改為total=5+com1;那麼程式就會報錯(沒有與這些運算元匹配的 "+" 運算子),因為左運算元5不是該複數類的物件,不能呼叫相應的成員函式complex operator+(int x),所以編譯錯誤。但如果我們定義一下兩個友元函式就能解決上述的問題:

friend complex operator+(complex com1,int x);

friend complex operator+(int x,complex com1);

3.最後還是一樣,我將用乙個示例來總結一下今天所講的內容(開發工具:vs2010): 

#include "stdafx.h"

#include class complex //複數類

complex operator+(complex com1);//成員函式過載雙目運算子+

//或friend complex operator+(complex com1,complex com2);//友元函式過載雙目運算子+

friend complex operator+(complex com1,int x);//友元函式過載雙目運算子+

//或complex operator+(int x);

friend complex operator+(int x,complex com1);//友元函式過載雙目運算子+

void showsum();

};complex complex::operator+(complex com1)

complex operator+(complex com1,int x)//左運算元型別為複數,右運算元的型別為整數

complex operator+(int x,complex com1)//左運算元型別為整數,右運算元的型別為複數

void complex::showsum()

friend voidoperator++(point& point);//友元函式過載單目運算子++

point operator++();//成員函式過載雙目運算子++

void showpoint();

};voidoperator++(point& point)//友元運算子過載函式

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...

過載操作符

1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...