14.4 賦值操作符
Class1& operator=(int i)
{
counter = i;
return *this;
}
賦值操作符可以重載。無論形參為何種類型,賦值操作符必須定義為成員函數,這一點與復合賦值操作符有所不同。
復制必須返回對*this的引用。
一般而言,復制操作符與復合賦值操作符應返回左操作數的引用。
14.5 下標操作符
下標操作符必須定義為類成員函數
1. 提供讀寫訪問
定義下標操作符比較復雜的地方在於,它在用作賦值的左右操作數時都應該能表現正常。下標操作符出現在左邊,必須生成左值,可以指定引用作為返回類型而得到右值。只要下標操作符返回引用,就可用作賦值的任意一方。
可以對const和非const對象使用下標也是個好主意。應用於const對象時,返回值應為const引用,因此不能用作賦值的目標。
類定義下標操作符時,一般需要定義兩個版本:一個為非const成員並返回引用,另一個為const成員並返回const引用。
2.原型下標操作符
class Foo
{
public:
Foo(int len)
{
vec = vector<int>(len);
}
int &operator[](const size_t index)
{
return vec[index];
}
const int &operator[](const size_t index) const
{
return vec[index];
}
private:
vector<int> vec;
};
摘自 xufei96的專欄