1 – 概念
運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。
運算子過載(operator overloading)只是一種」語法上的方便」,也就是它只是另一種函式呼叫的方式。
在c++中,可以定義乙個處理類的新運算子。這種定義很像乙個普通的函式定義,只是函式的名字由關鍵字operator及其緊跟的運算子組成。差別僅此而已。它像任何其他函式一樣也是乙個函式,當編譯器遇到適當的模式時,就會呼叫這個函式
例如:乙個類中有int型別和string型別的成員變數,原本+運算子只能實現兩個陣列之間相加,但是現在可以通過運算子過載實現兩個物件相加,然後自己去實現物件內成員變數的運算方法,這樣做方便去實現物件之間的運算
2 – 可過載的運算子
幾乎c中所有的運算子都可以過載,但運算子過載的使用時相當受限制的。特別是不能使用c中,當前沒有意義的運算子(例如用**求冪)不能改變運算子優先順序,不能改變運算子的引數個數。這樣的限制有意義,否則,所有這些行為產生的運算子只會混淆而不是澄清寓語意。
3 – 全域性函式實現運算子過載(只能對公有的成員變數的物件進行操作)
#include
#include
using
namespace std;
class
chongzai
chongzai
(string subject,
int month,
int num,
int study_money)
//private:(私有成員變數對應的物件實現運算子過載)
string subject;
int month;
int num;
int study_money;};
#if 0
//運算子過載函式
intoperator
+(qf &ob1, qf &ob2)
#endif
#if 0
chongzai operator
+(qf &ob1, qf &ob2)
#endif
void
operator
+(qf &ob1, qf &ob2)
void
test()
4 – 私有成員變數對應的物件實現運算子過載
(1)方法1:將運算子過載函式設定為友元函式實現對私有成員的操作
void
operator
+(chongzai &ob1,chongzai &ob2)
void
test2_1()
(2)方法2:使用成員函式實現運算子過載
#include
#include
using
namespace std;
class
chongzai
#endif
intoperator+(
const chongzai &ob)
private
: string subject;
int month;
int num;
int study_money;};
#if 0
void
test3()
#endif
void
test4()
5 – 當成員變數涉及指標時所需要考慮的運算子過載
#include
#include
#include
using
namespace std;
class
person
person
(int id,
char
*name,
char ***)
~person()
}person
(const person &ob)
void
getmsg()
//運算子過載函式
void
operator
=(person &ob)
this
->name =
newchar
[strlen
(ob.name)+1
];strcpy
(this
->name, ob.name)
;this
->*** = ob.***;
}private
:int id;
char
*name;
char ***;};
void
test1()
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...