c ++ getter在类外没有返回更改的值

时间:2013-08-22 20:28:56

标签: c++ class setter getter

我有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后值仍然保持不变?

1 个答案:

答案 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>