在类中操纵向量的成员

时间:2016-01-25 14:46:02

标签: c++ vector operator-overloading

我开始编写课程并提出以下问题。 假设我有以下课程:

class foo
{
private:
    int bar;
public:
    foo(int bar): bar(bar){}
    void set_bar(int ubar){bar=ubar;}
    int get_bar(){return bar;}
};

现在我想编写一个包含foo

实例的类
class foo_cont
{
private:
    vector<foo> foo_vec;
public:
    foo_cont(){}
    void add_element(foo f1){foo_vec.push_back(f1);}
};

假设我做了foo_cont f1;的实例,并用foo_vec的实例填充foo。如何使用foo_vec修改set_bar()的元素?

编辑: 由于我对堆栈溢出很陌生,这可能是一个非常愚蠢的问题,但为什么我会得到downvotes?

2 个答案:

答案 0 :(得分:2)

您可以为课程operator []定义foo_cont。例如

class foo_cont
{
private:
vector<bar> foo_vec;
public:
    // ...
    bar & operator []( size_t i )
    {
        return foo_vec[i];
    }   
    const bar & operator []( size_t i ) const
    {
        return foo_vec[i];
    }   
};

例如

for_cont[i].set_bar( 10 );

在任何情况下,如果要在类范围之外更改它们,则需要为向量元素提供访问器。

答案 1 :(得分:0)

  

如何使用set_bar()?

修改foo_vec的元素

课程内foo_cont

如果您想在set_bar()中的向量的第一个元素上调用foo_cont,请使用:

foo_vec[0].set_bar(10);

如果您想在set_bar()中的向量的n - (按索引)元素上调用foo_cont,请使用:

foo_vec[n].set_bar(10);

由班级用户

您可以通过运算符函数或向向量本身提供访问器函数来提供对n的{​​{1}}元素的访问。

foo_vec

并将其用作:

bar& operator[]( size_t i )
{
    return foo_vec[i];
}   
bar const& operator[]( size_t i ) const
{
    return foo_vec[i];
}   

foo_cont f1;
f1.add_element(10);
int a = f1[0].get_bar();

并将其用作:

std::vector<foo>& get_foo_vector()
{
   return foo_vec;
}

std::vector<foo> const& get_foo_vector() const
{
   return foo_vec;
}