我有1个主要课程
class Vehicle{
private:
int fuel;
public:
int get_fuel(){ return this->fuel; }
void set_fuel(int fuel){ this->fuel = fuel; }
};
也是车辆的1个子类
class Car : public Vehicle{
public:
Car();
};
Car::Car(){
set_fuel(500);
}
也是我的 main.cpp 文件
#include <cstdlib>
#include <iostream>
#include "Vehicle.h"
#include "Car.h"
using namespace std;
int main(int argc, char *argcv[]){
Car c;
cout << c.get_fuel() << endl; //500
//set fuel to 200
c.set_fuel(200);
//print fuel again
cout << c.get_fuel() << endl;//still 500
}
为什么在使用setter后,使用getter后值仍然保持不变?
答案 0 :(得分:2)
在VC ++ 2012上,您的确切代码按预期工作。输出为500和200。
class Vehicle {
private:
int _fuel;
public:
Vehicle(){
_fuel = 0;
}
int get_fuel(){
return _fuel;
}
// I like chainable setters, unless they need to signal errors :)
Vehicle& set_fuel(int fuel){
_fuel = fuel;
return *this;
}
};
class Car : public Vehicle {
public:
Car():Vehicle(){
set_fuel(500);
}
};
// using the code, in your main()
Car car;
std::cout << car.get_fuel() << std::endl; // 500
car.set_fuel(200);
std::cout << car.get_fuel() << std::endl; // actually 200
这是一个稍微修改过的版本。将它放在.CPP文件中并尝试一下。它不能无效!
PS :停止使用与参数同名的属性。始终不得不使用this->
非常不酷! 当你忘记使用this->
时,你会看到本世纪的错误,当你将值分配给自己并且无法弄清楚出了什么问题。 < / p>