運算子過載實質上是對已有的運算子賦予多重含義,擴充套件c++中提供的運算子的適用範圍,以用於類所表示表示得抽象資料型別
返回值型別 operator 運算子 (形參表)
在程式編譯時,把運算子的表示式轉換為對運算子函式的呼叫。把運算子的運算元,作為運算子函式的引數進行傳遞。當運算子發生過載時,根據實參的型別決定呼叫對應的運算子函式。
運算子可以被過載為普通函式,也可以被定義為類的成員函式。
過載為普通函式
過載為普通函式時,引數個數為運算子目數
#include
using
namespace
std;
class complex
};complex operator + (const complex &a,const complex &b)
int main()
過載為成員函式
過載為成員函式時,引數個數為運算子目數減一
賦值運算子兩邊的型別可以不匹配
當遇到以下情況時,需要過載賦值運算子
把乙個int型別的變數賦值給乙個complex物件
把乙個char*型別的字串賦值給乙個字串物件
對於賦值運算子,只能把它過載為成員函式
例子:
編寫乙個長度可變的字串類string
在該類中包含乙個char*型別的成員變數,指向動態分配的儲存空間。該儲存空間用於存放以』\0』結尾的字串
#include
#include
using
namespace
std;
class string
; const
char * c_str();
char *operator=(const
char *s);
~string();
};char *string::operator=(const
char *s)
else
str=null;
return str;
}string::~string()
int main()
cout實在iostream中定義的,ostream類的物件。
「<<」在iostream中對」<<」進行了過載。
例子
#include
#include
#include
using
namespace
std;
class complex
; friend ostream &operator
<<(ostream &os,const complex &c);
friend istream &operator>>(istream &is,const complex &c);
};ostream &operator
<<(ostream &os,const complex &c)
istream &operator>>(istream &is,const complex &c)
int main()
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載 類的賦值運算子過載
下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...
運算子過載限制 不能過載的運算子
1.過載後的運算子必須至少有乙個操作符是使用者定義的型別。2.使用運算子不能違反運算子原來的句法規則。3.不能新建運算子 4.不能過載 sizeof const cast,dynamic cast,reinterpret cast,static cast 5.只能通過成員函式過載的運算子 限制說明 ...