-2

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

4

1 回答 1

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->,您将看到世纪错误,即您将值分配给自身并且无法弄清楚出了什么问题。

于 2013-08-22T20:51:54.147 回答