C ++从不同的函数中分配类成员的值
Posted
技术标签:
【中文标题】C ++从不同的函数中分配类成员的值【英文标题】:C++ Assign value of class member from a different function 【发布时间】:2020-08-13 18:52:59 【问题描述】:假设我有一堂课:
class Test
public:
int x = 1;
;
在 main 中,我创建了一个该类的对象并调用了一个名为 setInt 的函数:
int main()
Test example;
setInt(example);
std::cout << example;
void setInt(Test example)
(// random if statement)
example.x = 5;
这将输出 1。
这怎么可能?我知道在上面的例子中,变量“example”只是函数的局部变量,但是有没有办法改变 main() 中变量的值?
(请原谅代码中的任何错误)
【问题讨论】:
你应该打开你的 C++ 书到解释如何使用引用和指针的章节,并且应该有很多例子可以做到这一点。 如果您在 Java 或 C# 或其他只引用对象的语言之后学习 C++,最好忘记在那里学到的所有内容并重新开始。 【参考方案1】:您只是复制整数,然后分配一个新值,而不是使用原始值进行操作。如果你能写:
void setInt(Test& example)
// Now you are changing the original value here
example.x = 5;
然后它就可以工作了。有一个引用运算符的替代方案,称为指针。它们的工作方式类似于通过函数引用。当您在取消引用的任何地方更改它们的值时,主值也会更改。
【讨论】:
【参考方案2】:默认情况下,将参数传递给函数是按值传递的,它会复制参数。函数中对此副本的更改不会反映在main
中。
如果要修改传入的参数,可以使用引用。将您的签名更改为:
void setInt(Test &example) // changing example changes the argument used in main
【讨论】:
你可以提到 C++ 中的隐式值语义,问题是“为什么它不能按预期工作?”以上是关于C ++从不同的函数中分配类成员的值的主要内容,如果未能解决你的问题,请参考以下文章