我开始编写课程并提出以下问题。 假设我有以下课程:
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?
答案 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;
}