【发布时间】:2013-09-06 02:04:12
【问题描述】:
我最近从 Java 过渡到 C++,但在弄清楚类继承如何准确工作时遇到了一些困难。目前,我有课程Weapon 和课程Minigun。 Minigun 继承了Weapon 类,这意味着它应该具有Weapon 定义的方法和变量。我的问题是我在Weapon 中有一个名为rate 的私有常量static int,还有一个返回一个名为getRate() 的整数的公共方法。 getRate() 只返回类中定义的速率变量。当Minigun 扩展Weapon,并且我在Minigun 中设置速率时,getRate() 方法仍然从Weapon 类返回常量,即使它是在Minigun 类上调用的。我认为它会像 Java 一样,继承的方法会使用 Minigun 中的修改后的变量。目前我必须执行以下操作;
Weapon.h
#ifndef __WEAPON__
#define __WEAPON__
class Weapon
{
public:
virtual int getRate()
{
return rate;
}
private:
const static int rate = 0;
};
#endif
Minigun.h
#include "Weapon.h"
#ifndef __WEAPON_MINIGUN__
#define __WEAPON_MINIGUN__
class Minigun: public Weapon
{
public:
int getRate(); // I have to define this here, and create it inside Minigun.cpp
private:
const static int rate = 30;
};
#endif
Minigun.cpp
#include "Minigun.h"
int Minigun::getRate() // Is there a way so I do not need to type this out for every class that extends Weapon?
{
return rate;
}
【问题讨论】:
-
在 minigun .cpp 中尝试
return Minigun::rate;。没有监护人 -
@Chemistpp 我的 Minigun.cpp 工作正常,我希望从 Minigun.cpp 中完全删除 getRate() 函数,并使用已在 Weapon 中定义的函数
-
从类 minigun 和 getrate 函数中移除速率。当你在 minigun 上调用这些函数时,它们只会调用继承的函数。
-
当我删除它时,Weapon 内部的 getRate() 被调用(这是我想要的),但它从基础 Weapon 类内部返回“rate”常量,而不是 Minigun 内部的常量.
-
我不确定重载是否适用于静态类成员变量,但如果它是 const 的话,为什么不直接使用直接返回值的函数(例如
return 30;)。
标签: c++ inheritance methods constants static-variables