一丶重載運算符
class x{
//...
返回類型 operator 運算符(形參表);
};
返回類型 X:operator 運算符(形參表)
{
函數體;
}
Complex Complex::operator+(Complex &c2)
{ return Complex(real+c2.real,image+c2.image);}
2.對運算符重載的函數有兩種處理方式
(1)把運算符重載的函數作爲類的成員函數;
(2)運算符重載的函數不是類的成員函數,在類中把它聲明爲友元函數。
不改變運算符所需要的操作數
不能創建新的運算符
運算符函數可以重載爲成員函數或友元函數
Object op 或 op Object
Ø 重載爲成員函數,解釋爲:
Object . operator op()
操作數由對象Object通過this指針隱含傳遞
Ø重載爲友元函數,解釋爲:
operator op (Object)
操作數由參數表的參數Object提供
●二元運算符
Ø 重載爲成員函數,解釋爲:
ObjectL . operatorop ( ObjectR )
左操作數由ObjectL通過this指針傳遞,右操作數由參數ObjectR傳遞
Ø重載爲友元函數,解釋爲:
operator op (ObjectL, ObjectR )
左右操作數都由參數傳遞
vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮數據。爲了可以使用vector,必須在你的頭文件中包含下面的代碼:#include <vector>構造函數。
用法
vector<T>c 產生空的vector.
vector<T>c1(c2) 產生同類型的才,並複製c2的所有元素。
vector<T>c(n)生成容器爲n的vector。
vector<T>c(beg,end)產生一個vector以區間[beg,end]爲元素初值、
~vector<T>()銷燬所有元素,並釋放內存。
c.size()返回元素個數。
c.empty() 判斷元素是否爲空。
c.max_size() 返回元素最大可能數量。
c.capacity()返回重新分配空間前可容納的最大元素數量。
c.reserve(n) 擴大容量n。
c1==c2 判斷C1是否等於c2.
c1=c2 將c2的全部元素賦值給c1.
c.assign(beg,end) 將區間[beg,end]的元素賦值給c。
c1.swap(c2)將c1和c2 元素互換。
swap(c1,c2) 同上。
at(idx) 返回索引idx所標識的元素的引用。進行越界檢查
operator[](idx) 返回索引idx所標識的元素的引用。不進行越界檢查
front() 返回第一個元素的引用,不檢查元素是否存在。
back()返回最後一個元素的引用,不檢查元素是否存在。
rbegin() 返回一個逆向迭代器,指向逆向遍歷的第一個元素。
rend() 返回一個逆向迭代器,指向逆向遍歷的最後一個元素。
c.insert(pos,e) 在pos位置插入元素e的副本,並返回新元素的位置。
c.insert(pos,n,e) 在pos位置n個元素e的副本。
c.insert(pos,ben,end)在pos位置插入區間[beg,end)內所有元素的副本。
c.push_back() 在尾部添加一個元素e的副本。
c.pop_back() 移除最後一個元素但不返回最後一個元素。
c.erase(pos) 刪除pos元素的位置,返回下一個元素的位置。
c.clear()移除所有元素,清空容器。
c.resize(num) 將元素數量改爲num(增加函數用defalut構造函數的產生,多餘元素被刪除。
c.resize(num,e) 將元素數量改爲num(增加元素是e的副本)
在我看來,運算符重載是很重要的,很有實用意義,豐富了類的功能和適用範圍,重載時一般都是基於原來的功能進行延伸不能太違背原來的意思,重載一次一勞永逸,爲下面節省很多,而且使程序更清晰。