簡體   English   中英

兩個運算符同時在c ++中重載

[英]Two operators simultaneity overload in c++

我想像數組一樣表示我的對象。 我的意思是程序員可以寫他的代碼

myobject[3]=2

在后面(在myobject代碼中)根本沒有數組,它只是表示。

所以我需要同時重載[]= 如何才能做到這一點?

謝謝,抱歉我的英語不好。

operator[]應該返回對您要修改的對象的引用。 它可能是某種元對象,它會使operator=重載以對主對象執行任何operator=

編輯 :作為OP澄清的問題, 有辦法做到這一點。 看這里:

#include <vector>
#include <iostream>

int & func(std::vector<int> & a)
{
    return a[3];
}

int main()
{
    std::vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    func(a) = 111;
    std::cout << a[3] << std::endl;
}

所以我需要重載[]和=同時性。 怎么可以做到的?

它無法完成。 你可以做的是覆蓋operator[]來返回'代理引用'。 也就是說,一個對象知道應用它的對象'myobject'並且索引使用'3',並且為映射類型(我按下int )以及賦值運算符提供適當的轉換運算符。 標准庫本身有一些代理引用的例子。 有些東西:

class proxy
{
public:
    proxy( object& object, int index ) : _object( object ), _index( index ) {}

    operator int() const { return _object.implementation.value_at( index ); }

    proxy operator=( int value ){ _object.implementation.value_at( index, value ); return *this; }

private:
    object& _object;
    int _index;
};

@yoni:可以給出向量的任何成員的地址(只要它存在)。 這是它的完成方式。

int& MyObject::operator[](size_t index)
{
    return mVector[index];
}
const int& MyObject::operator[](size_t index) const
{
    return mVector[index];
}

這是可能的,因為std :: vector保證將元素存儲在連續的數組中。 std :: vector的operator []返回它存儲的值的引用類型。 通過重載operator [],您只需要將該引用傳遞給operator []函數。

注意:std :: vector將負責邊界檢查。 使用@Griwes提供的解決方案,沒有邊界檢查。

編輯:似乎Griwes編輯了他的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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