(C++) Getter 和 setter 在 class 中没有按预期工作

(C++) Getter and setter in a class not working as intended

我正在尝试编写一个使用 getter 和 setter 的简单代码。

这是 test_class.hpp 文件

#ifndef TEST_CLASS_HPP
#define TEST_CLASS_HPP

class test_class
{
private:
    int num;
public:
    test_class(int num);
    ~test_class();
    int& get_num();
    void set_num(int& num);
};


#endif

这是 test_class.cpp 文件

#include<iostream>
#include"test_class.hpp"

test_class::test_class(int num):num(num){};
test_class::~test_class(){};

int& test_class::get_num(){return num;}
void test_class::set_num(int& num){num = num;}

这是主要功能

#include<iostream>
#include"test_class.hpp"
#include<random>

int main(){
    test_class obj_test(69);

    int count = 10;
    while (count > 0)
    {
        std::cout << obj_test.get_num() << " at count " << count << std::endl;
        auto new_change = obj_test.get_num() - count;
        obj_test.set_num(new_change);
        count--;
    }
    
}

目的:随着while循环中count从10变为1,num变量值也应该减小。

观察:num变量的值在整个迭代过程中保持不变(初始值为69)。我玩过左值和右值,但我不能让它按预期工作。

void test_class::set_num(int& num){num = num;}

这里到底发生了什么?您将 num 分配给它自己。这段代码什么都不做。你真正想要的是

void test_class::set_num(int& num){ this->num = num; }

顺便说一句,如果你声明

,你会避免这种错误
void test_class::set_num(const int& num)

(甚至没有 &)你应该这样做,因为你没有在 set_num 函数中修改 num