C++ Klasse, Methode, Vererbung

Ich habe vor kurzem umgestellt von Java zu C++, und ich bin mit einigen Schwierigkeiten arbeiten Sie heraus, wie die Vererbung genau funktioniert. Heute habe ich die Klasse Weapon und die Klasse Minigun. Minigun erbt die Klasse Weapon, was bedeutet, es sollten über die Methoden und Variablen, die Weapon definiert. Mein Problem ist, dass ich eine private Konstante static int innen Weapon genannt rate, und eine öffentliche Methode, die eine Ganzzahl zurückgibt genannt getRate(). getRate() gibt einfach die rate Variablen wie in der Klasse definiert. Wenn Minigun erstreckt Weapon, und ich habe die rate innerhalb Minigun, die getRate() Methode noch gibt die Konstante aus der Weapon Klasse, auch wenn es aufgerufen wird, auf der Minigun Klasse. Ich dachte, es würde wirken wie Java, und das intherited Methode würde die geänderte variable in Minigun. Aktuell habe ich das folgende zu tun;

Waffe.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;
}
versuchen return Minigun::rate; im minigun .cpp. Keine gaurentee
Meine Minigun.cpp funktioniert gut, ich bin auf der Suche, um vollständig zu entfernen getRate () - Funktion aus Minigun.cpp, und verwenden Sie eine bereits definierte Waffe
entfernen rate von Klasse minigun und die Funktion getrate. Beim Aufruf von Funktionen minigun, Sie rufen einfach die geerbten Funktionen.
Wenn ich entfernen, die getRate() inside-Waffe genannt wird (was ich will), aber es gibt die "Geschwindigkeit" konstant vom inneren der Basis Waffe-Klasse, anstelle von der Innenseite der Minigun.
Ich bin mir nicht sicher, ob das überladen funktioniert für statische Variablen in einer Klasse oder nicht, aber warum nicht einfach eine Funktion benutzen, wird der Wert direkt (z.B. return 30;) wenn es das const sowieso.

InformationsquelleAutor Jack Wilsdon | 2013-09-02

Schreibe einen Kommentar