C 類與物件 運算子過載

2021-10-02 21:02:27 字數 3720 閱讀 5685

在某些特殊的運算情況下,以正常的運算方法不匹配時,就可以使用運算子過載;

注意:當過載運算子一樣的時候,類內作為友元的只放乙個就可以了!!!

標頭檔案:

#include

class

computer

;實現cpp檔案:

#include

"computer.h"

#include

computer::

computer

(int val)

std::string computer::

description()

標頭檔案:

class

computer

;class

games

;實現cpp檔案:

#include

"games.h"

#include

"computer.h"

games::

games

(int val)

computer games::

operator*(

)

測試函式:

/*

運算子過載

假設,一台電腦可以換3臺遊戲機

*/#include

"computer.h"

#include

"games.h"

#include

using

namespace std;

//使用友元,實現運算子過載;

computer operator

+(games& t1,games &t3)

intmain

(void

)

執行結果:

多種運算子的過載應用:

/*

實現賦值運算子 =

比較運算子 < > ==

輸入,輸出運算子 << >>

下標運算子

*/#include

"boy.h"

//使用全域性函式可以指定格式;使程式**美觀

ostream&

operator

<<

(ostream& os,boy&boy)

istream&

operator

>>

(istream& is,boy&boy)

intmain

(void

)else

if(boy1 == boy2)

else

//測試下標運算子功能:列舉型別

cout <<

"名字:"

<

getname()

<<

",年齡:"

<< boy1[age]

<<

",薪資:"

<< boy1[salary]

<<

",係數:"

<< boy1[power]

<< endl;

//測試下標法運算子功能:巨集定義型別

cout <<

"名字:"

<

getname()

<<

",年齡:"

<< boy2[boy_age]

<<

",薪資:"

<< boy2[boy_salary]

<<

",係數:"

<< boy2[boy_power]

<< endl;

system

("pause");

return0;

}

#pragma once

#include

#include

using

namespace std;

#define boy_age "age"

#define boy_salary "salary"

#define boy_power "power"

typedef

enum

boy_key;

class

boy//析構函式

string getname()

boy&

operator

=(boy& boy)

;//賦值函式

bool

operator

>

(boy& boy)

;//大於,

bool

operator

<

(boy& boy)

;//小於,

bool

operator

==(boy& boy)

;//等於,

friend ostream&

operator

<<

(ostream& os, boy& boy)

;//輸出:使用友元可以讓格式更加美觀

friend istream&

operator

>>

(istream& is, boy& boy)

;//輸入:解釋同上

//運算子下標法可以用enum(列舉) 和#define(巨集定義)來實現

intoperator

(int number)

;//列舉實現

intoperator

(string index)

;//巨集定義實現

private

: string name;

int age;

int salary;

intpower();};

#include

"boy.h"

boy::

boy(

)boy::

boy(string name,

int age,

int salary)

boy& boy::

operator

=(boy& boy)

bool boy::

operator

>

(boy& boy)

else

}bool boy::

operator

<

(boy& boy)

else

}bool boy::

operator

==(boy& boy)

else

}int boy::

operator

(int number)

}int boy::

operator

(string index)

else

if(index == boy_salary)

else

if(index == boy_power)

else

}int boy::

power()

return tmp;

}

執行結果:

類與物件 C 過載運算子

class person 呼叫形式 person p3 p1.operator p2 或者 p3 p1 p2 person operator person p1,person p2 intmain 一般情況下,我們把算術運算子定義成非成員函式,因為我們不需要改變運算物件的狀態,所以形參都是常量的引用...

2 7 類與物件 C 運算子過載

目錄 一 加號運算子過載 1.加法過載可以通過全域性函式實現 2.加法過載可以通過類成員函式實現 二 左移運算子過載 三 遞增運算子過載 四 賦值運算子過載 五 關係運算子過載 六 函式呼叫運算子過載 運算子過載是對已有運算子進行重新定義,賦予其新的功能,使其適應不同資料型別。實現兩個自定義資料型別...

C 類與物件 中 賦值運算子過載

將乙個沒有賦值含義的字元進行重新修改 例如 簡單的來說,運算子過載就是將對應的符號賦予新的意思,能夠更加容易處理比較複雜的形式,例如對兩個日期的比較,不只是單純的數字之間的比較,我們就需要寫一系列的 來將等於號重新賦予新的意思即可.操作 返回值型別 operator操作符 引數列表 1.用於內建型別...