通过引用传递数据成员
Passing data member by reference
如果我有这样的类(原谅粗略的语法):
class Z{
public:
void method1();
void method2(vector<X>& v);
void method3(vector<X>& v);
private:
std::vector<X> myvec;
}
基本上我想将myvec从method1()通过method2()传递到method3(),在那里它将被修改。如果我的方法 1() 看起来像这样:
void Z::method1(){
vector<X> v = z::myvec; //What do I have to do with this line so that the changes
method2(v); //made to v in method3() are permanent and not lost once
} //method1() returns?
void Z::method2(vector<X>& v){
method3(v);
}
//Modify vector<X> myvec
void Z::method3(vector<X>& v){
v.push_back(<something>);
}
如何更改 method3() 中的向量,以便一旦 method1() 返回,对向量所做的更改是永久性的并且不会丢失?
只需v
引用:
vector<X>& v = myvec;
或者简单地传递myvec
本身:
method2(myvec);
为什么不只允许 method3 直接使用类的成员数据?这是一件完全正常的事情。
void Z::method3(){
myvec.push_back(<something>);
}
但是,如果您真的想按照自己的方式进行操作(我建议不要这样做,因为它太特殊了),请将您的第一行注释替换为
vector<X>& v = z::myvec;
我不知道
你为什么想要这个流程,method1()-->method2()-->method3()。如果这不是故意的,您可以直接在method3()中使用数据成员myvec。但我相信情况并非如此,您必须使用它的用例。
对于另一种方式,您可以通过这种方式修改method1()。
void Z::method1(){
method2(z::myvec);
}
并保持函数的其余部分不变。
实际上,在您的 method1() 中发生的事情实际上是在创建新对象并传递带有引用的新对象,因此所有更改都是对该新向量而不是原始向量进行的。
vector<X> v = z::myvec; // this creates new object.
您测试是使用调试进行的。
如果这回答了您的疑问,请告诉我。
相关文章:
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 具有引用数据成员的结构不是文本类型吗?
- 引用静态数据成员
- 为什么当类的数据成员更改为引用时输出不同
- 为什么INVOKE总是取消引用数据成员,而不是在可能的情况下调用
- 了解常量引用对非成本数据成员的分配
- 返回对成员变量数据的引用的开销
- C++对类数据成员的引用
- 移动具有常量数据成员或引用成员的类的ctor
- 在C++中,"static initialization fiasco"是否仅影响对另一个模块中定义的对象的数据成员的引用?
- 将基元类型的数据成员作为常量引用返回
- CUDA:结构体的共享数据成员和对该结构体的引用成员具有不同的地址和值
- 如果类具有引用数据成员,为什么编译器不合成默认赋值运算符
- 通过引用传递数据成员
- 返回对类静态数据成员的引用的正确方法是什么?(我正在使用Qt,以防万一它有所作为)
- 错误 C2355:'this':只能在非静态成员函数或非静态数据成员初始值设定项中引用
- 在c++中使用初始化列表初始化数据成员引用