Я недавно перешел с Java на C++, и у меня возникают некоторые трудности с разработкой того, как работает наследование классов. В настоящее время у меня есть класс Weapon
и класс Minigun
. Minigun
наследует класс Weapon
, что означает, что он должен иметь методы и переменные, которые определяет Weapon
. Моя проблема заключается в том, что у меня есть закрытый константный статический int внутри Weapon
, называемый rate
, и открытый метод, который возвращает целое число getRate()
. getRate()
просто возвращает переменную скорости, определенную в классе. Когда Minigun
расширяет Weapon
, и я установил скорость внутри Minigun
, метод getRate()
по-прежнему возвращает константу из класса Weapon
, хотя он вызывается в классе Minigun
. Я думал, что он будет действовать как Java, а в неработающем методе будет использоваться модифицированная переменная внутри Minigun
. В настоящее время я должен сделать следующее:Наследование метода класса C++
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;
}
try 'return Minigun :: rate;' in minigun .cpp. Нет gaurentee – Chemistpp
@Chemistpp My Minigun.cpp отлично работает, я хочу полностью удалить функцию getRate() из Minigun.cpp и использовать тот, который уже определен в Weapon –
, чтобы удалить скорость из класса minigun и функцию getrate.Когда вы вызываете эти функции на minigun, они просто назовут унаследованные функции. – Chemistpp