[英]Overloading subscript operator []
為什么它需要成為類的成員函數才能運行,並且最好返回對私有成員的引用?
class X
{
public:
int& operator[] (const size_t);
const int &operator[] (const size_t) const;
private:
static std::vector<int> data;
};
int v[] = {0, 1, 2, 3, 4, 5};
std::vector<int> X::data(v, v+6);
int& X::operator[] (const size_t index)
{
return data[index];
}
const int& X::operator[] (const size_t index) const
{
return data[index];
}
至於為什么需要[]作為會員,你可以閱讀這個問題 (由你真誠地)。 似乎它只是它的方式,沒有真正令人信服的解釋。
至於為什么要返回參考? 因為您想要提供一種不僅可以讀取的方式,還可以(對於非const對象)來修改數據。 如果回報不是參考(或某些代理)
v [i] = 4;
不行。
HTH
根據13.5.5,它需要是一個成員函數:
operator []應該是一個非靜態成員函數,只有一個參數。 它實現了下標語法
對私有成員的引用完全正常並且很常見。 您隱藏了類的用戶的詳細信息,但仍然提供了所需的功能(修改單個元素的能力)
你的data
變量可能不是靜態的,除非你真的想在你班級的所有實例中分享它
對於第一個問題,它只是他們決定必須的方式,即你做不到:
T operator[]( const X &, size_t );
作為外部功能。
是的,你很好地返回對私有成員的引用,如果允許用戶在那里寫,則為非const,否則為非const。
在您的示例中,盡管數據是靜態的,但如果它是返回的源,則沒有意義。
調用非成員operator[]
的語法是什么? 任何語法都會很尷尬。 operator[]
接受[
和]
一個參數,這通常是索引或查找對象所需的某種數據。
此外,是的,返回引用是一個好主意,即使它是私有成員。 這正是STL向量所做的,而且我可以想到的任何其他類我曾經使用過提供operator[]
。 建議保持使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.