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 ++从不同的函数中分配类成员的值的主要内容,如果未能解决你的问题,请参考以下文章

CPP复习笔记 3

C ++从类外部设置指向结构中函数成员的指针

C ++ - 通过getter函数在单独的类中从对象指针映射访问成员函数

如何从另一个成员函数调用成员函数指针?

C++ - 如何从同一个类的静态函数访问一个类的私有成员?

从成员函数打印 vector<int> 元素时出现 C++ 段错误