簡體   English   中英

重載下標運算符[]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM