虚拟const函数未返回初始化值

时间:2016-08-11 11:13:28

标签: c++

我有一个与动物有关的基本类和标题设置,我试图有一个显示动物当前饥饿程度的功能。经过测试,我发现饥饿程度不是我设定的初始值。

Monkey.cpp

#include "Monkey.hpp"

using namespace std;

Monkey::Monkey() {
}

unsigned int foodEaten = 0;
unsigned int foodIntake = 800;

unsigned int Monkey::hungerLevel() const {
    return (makefoodIntake - foodEaten);    
}

Monkey.hpp

#ifndef MONKEY_HPP
#define MONKEY_HPP

class Monkey : public Animal {
private:
unsigned int foodEaten;
unsigned int foodIntake;

public:
Monkey();
// Overridden to implement the monkey's hunger level
virtual unsigned int hungerLevel() const;

#endif /* end of include guard: MONKEY_HPP */

为什么这最初不会返回800?

2 个答案:

答案 0 :(得分:1)

foodEaten文件中定义的foodIntake.cpp都是全局范围内的两个变量,而不是类Monkey的成员。

也在头文件中初始化它们:

class Monkey {
  private:
    unsigned int foodEaten{0};
    unsigned int foodIntake{800};
// ...
};

答案 1 :(得分:1)

因为你没有在构造函数中初始化类的成员。

您还有一些其他变量,在全局范围内声明的名称相同。

但是,由于您具有相同名称的类成员,因此该方法使用类成员,而不是全局范围中的变量。

您需要简单地初始化类成员,而不是声明同名的全局变量:

Monkey::Monkey() : foodEaten(0), foodIntake(800)
}