C++ 在类中操纵向量的成员
我刚开始上写作课,有以下问题。 假设我有以下课程:C++ 在类中操纵向量的成员,c++,vector,operator-overloading,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; publi
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);}
};
class foo\u cont
{
私人:
向量foo_vec;
公众:
foo_cont(){}
void add_元素(foo f1){foo_vec.push_back(f1);}
};
假设我安装了foo\u cont f1编码>并用foo
的实例填充foo\u-vec
。如何使用set\u bar()
修改foo\u vec
的元素
编辑:
由于我对堆栈溢出非常陌生,这可能是一个非常愚蠢的问题,但为什么我会获得否决票?您可以为类foo\u 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 );
在任何情况下,如果要在类范围之外更改向量元素,则需要为向量元素提供访问器。您可以为类定义操作符[]
。比如说
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 );
在任何情况下,如果要在类范围之外更改向量的元素,都需要为它们提供访问器
如何使用set_bar()修改foo_vec的元素
类内foo\u cont
如果要对foo\u cont
中向量的第一个元素调用set\u bar()
,请使用:
foo_vec[0].set_bar(10);
foo_vec[n].set_bar(10);
如果要在foo\u cont
中的向量的n
-th(按索引)元素上调用set\u bar()
,请使用:
foo_vec[0].set_bar(10);
foo_vec[n].set_bar(10);
由该类用户提供
您可以通过运算符函数或向向量本身提供访问函数来访问foo_-vec
的n
-th元素
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();
foo_cont f1;
f1.add_element(10);
int a = f1.get_foo_vector()[0].get_bar();
或
如何使用set_bar()修改foo_vec的元素
类内foo\u cont
如果要对foo\u cont
中向量的第一个元素调用set\u bar()
,请使用:
foo_vec[0].set_bar(10);
foo_vec[n].set_bar(10);
如果要在foo\u cont
中的向量的n
-th(按索引)元素上调用set\u bar()
,请使用:
foo_vec[0].set_bar(10);
foo_vec[n].set_bar(10);
由该类用户提供
您可以通过运算符函数或向向量本身提供访问函数来访问foo_-vec
的n
-th元素
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();
foo_cont f1;
f1.add_element(10);
int a = f1.get_foo_vector()[0].get_bar();
或
foo\u计数
中的向量
有一个条
而不是foo
。这是一个打字错误吗?你是在问我们如何对向量中包含的元素调用函数吗?使用索引:foo\u vec[i]。设置工具栏(0)代码>。即使foo_vec是私有的,我真的可以这样做吗?foo_count
中的vector
有一个bar
而不是foo
。这是一个打字错误吗?你是在问我们如何对向量中包含的元素调用函数吗?使用索引:foo\u vec[i]。设置工具栏(0)代码>。即使foo_-vec是私有的,我真的可以这样做吗?我相信OP是特别要求通过foo_-cont
public API来实现的。从莫斯科的回答中可以看到Vlad。如果我没有以正确的方式提问,我想在我的主要部分中有一个foo_cont实例。我如何访问foo_vec,即使它是foo_cont实例的私人成员?我相信OP是专门询问如何通过foo_cont
公共API进行访问。从莫斯科的回答中可以看到Vlad。如果我没有以正确的方式提问,我想在我的main中有一个foo_-cont实例,那么即使它是foo_-cont实例的私有成员,我如何访问foo_-vec?好的,如果我的for_-cont实例名为f1,我可以执行f1[I]。设置_-bar(10)?是否需要重写[]运算符两次?这样做的目的是什么?@PtK使用常量对象或对象的常量引用时,需要第二个运算符。例如,如果您有一个通用函数f(const foo_cont&c);在函数中,只能使用为常量对象设计的运算符的第二个重载。确定如果我的for_cont实例名为f1,我可以执行f1[I]。是否设置_栏(10)?是否需要重写[]运算符两次?这样做的目的是什么?@PtK使用常量对象或对象的常量引用时,需要第二个运算符。例如,如果您有一个通用函数f(const foo_cont&c);在函数中,只能使用为常量对象设计的运算符的第二个重载。