(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
。
我正在尝试编写一个使用 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
。