C++ Méthode De Classe De L'Héritage
J'ai récemment fait la transition à partir de Java C++, et je vais avoir quelques difficultés à trouver comment l'héritage de classe fonctionne exactement. Actuellement, j'ai la classe Weapon
et la classe Minigun
. Minigun
hérite de la classe Weapon
, ce qui signifie qu'il doit avoir les méthodes et les variables qui Weapon
définit. Mon problème est que j'ai un privé statique de la constante de type int à l'intérieur de Weapon
appelé rate
, et une méthode publique qui renvoie un entier appelé getRate()
. getRate()
retourne simplement le taux variable tel que défini dans la classe. Lorsque Minigun
s'étend Weapon
, et j'ai fixé le taux à l'intérieur de Minigun
, le getRate()
méthode renvoie toujours la constante de la Weapon
classe, même si elle est appelée sur le Minigun
classe. J'ai pensé qu'il serait agir comme Java, et le intherited méthode serait d'utiliser de la modification de la variable à l'intérieur de Minigun
. Actuellement, j'ai de faire ce qui suit;
Arme.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;
}
- essayez
return Minigun::rate;
dans le minigun .rpc. Pas de gaurentee - Mon Minigun.cpp fonctionne très bien, je suis à la recherche d'enlever complètement la getRate() la fonction de Minigun.cpp, et d'utiliser celui déjà défini dans l'Arme
- retirez le taux de la classe minigun et le getrate fonction. Lorsque vous appelez ces fonctions sur minigun, ils vous suffit d'appeler le héritée des fonctions.
- Lorsque je le supprime, le getRate() à l'intérieur de l'Arme est appelée (qui est ce que je veux), mais il renvoie à la "vitesse" constante à partir de l'intérieur de la base classe d'Arme, au lieu de l'un à l'intérieur de Minigun.
- Je ne suis pas sûr si la surcharge de travaux pour la classe statique des variables de membre ou pas, mais pourquoi ne pas simplement utiliser une fonction qui retourne la valeur directement (par exemple,
return 30;
) si c'est const de toute façon.
Vous devez vous connecter pour publier un commentaire.
Ne pas être statique. Par exemple:
Nous déclarons un protégé de type int dans la classe de base. Ceci signifie que toutes les dérivées de la classe qui hérite de la classe de base qui sera mis à l'variable. Vous ne déclarez une variable
static
si vous souhaitez qu'une seule instance de la variable partagée pour toutes les instances de cet objet.De la Base de constructeurs seront appelés avant la dérivée constructeur. Vous pouvez réinitialiser les valeurs par défaut dans votre dérivés constructeur pour les objets de ce type. Fonctions publiques qui fera appel à la plupart des dérivées de la fonction virtuelle. Dans ce cas, nous voulons
Minigun
à se comporter de la même chose pour notre taux de fonctions nous avons donc simple de ne pas mettre en œuvre toute fonctionMinigun
de sorte que leWeapon
fonctions sont appelées à la place.sortie:
Minigun::Minigun() { rate = 30 }
à l'intérieur de la Minigun.cpp, je reçois un message d'erreur indiquant queWeapon::rate
est privé. Que puis-je faire à ce sujet autre que l'aide d'un setter/getter combo?protected:
assurez-vous qu'il est déclaré commeWeapon
cas de retour d'un taux deWeapon::rate
pargetRate()
etMinigun
cas de retour d'un taux deMinigun::rate
.Parce que la méthode
getRate()
est virtuel unWeapon
pointeur ou une référence à unMinigun
exemple serait de retour à un taux deMinigun::rate
.Si seulement le taux variable des changements dans les classes dérivées, une classe de modèle nécessiterait moins de codage de la dynamique polymorphes version. La version du modèle ressemblerait à: