2016-12-15 4 views
-2

Ich habe wenige Klassen, die dieselbe Struktur als ein privates Mitglied verwenden. Ist es möglich, Struktur Getter-Funktionen zu erstellen, die ich aus/in Klassen verwenden kann? Ich fühle mich wie die Funcs zu erstellen. für jede Klasse ist nicht der richtige Weg, es zu tun.Struct Methoden insde eine Klasse

Etwas wie folgt aus:

someheader 

struct A { 
    A(const int& vl) : someval(vl) {} 
    int someval{0}; 
    int getSomeval() const {return someval;} 
}; 

B 
include "someheader.h" 
class B { 
public: 
    B(); 

private: 
    A a; 
}; 

int main() { 
    B b; 
    int v = b.getSomeval(); 
} 
+0

Off Topic aber warum nehmen Sie eine int als Referenz in Ihrem Konstruktor? – Stargateur

+0

Freund ........ – pm100

Antwort

1

bearbeiten: Wie @HolyBlackCat erwähnt, verwenden private Erbschaft anstelle eines privaten Mitglied, dann eine using Anweisung die private Basisklasse Funktionselement zu bringen, in den öffentlichen Bereich:

class B : A { 
public: 
    B(int i) : A(i) {} 

    using A::getSomeval; /* 
    ^^^^^^^^^^^^^^^^^^^^ */ 
}; 


int main() { 
    B b(42); 
    std::cout << b.getSomeval() << std::endl; 
} 

Sie könnten die structs öffentlich-erben:

class B : public A { 
public: 
    B(int i) : A(i) {} 
}; 

B b(42); 
b.getSomeval(); 

Oder machen A ein öffentliches Daten Mitglied B:

class B { 
public: 
    B(int i) : a(i) {} 
    A a; 
}; 

B b(42); 
b.a.getSomeval(); 

jedoch diese Methode bricht Kapselung.

Die meisten IDEs konstruieren Getter- und Setter-Funktionen automatisch für Sie - Sie müssen sie nicht unbedingt von Hand schreiben.

+1

Als Alternative zur öffentlichen Vererbung könnte man private Vererbung verwenden und den Getter mit 'public:' '' using A :: getSomeval; 'öffentlich machen. – HolyBlackCat

+0

Ich wusste nicht, dass das eine Sache war. Vielen Dank! –