abstrakte Klasse
-
hallo,
ich habe eine abstrakte Klasse Atrikel. Und Eine Klasse Bucher die die Attribute von Artikel haben soll.
Das ganze sieht bis jetzt so aus :Klasse Artikel:
class Artikel { public: //##ModelId=437DBE420148 virtual void print() = 0; private: //##ModelId=437DBDBB035B int ArtikelNr; //##ModelId=437DBDDE0138 double Preis; //##ModelId=437DBEBB0280 string Titel; };Klasse Buecher:
class Buecher : public Artikel { public: //##ModelId=437DC823007D bool suche(); void print(); //void ausgabe(); //##ModelId=438313E0009C Buecher(); //##ModelId=438313ED030D ~Buecher(); private: //##ModelId=437DBE9000EA string Autor; };Jetzt möchte ich eine Instanz der Klasse Buecher anlegen und den Inhalt( ArtikelNur, Preis,Titel,Autor) mit der Methode print ausgeben.
Ausschnitt aus dem Hauptprogramm:
Artikel *Buch; Buch = new Buecher(); Buch.print();Funktion Print()
void Buecher::print() { cout << " ArtikelNr " << ArtikelNr; //cout << " Preis " << Preis; //cout << " Titel " << Titel; cout << " Autor " << Autor; return ; }Das Problem bei cout << " ArtikelNr " << ArtikelNr;
kommt [C++ Fehler] Bücher.cpp(41): E2247 Zugriff auf 'Artikel::ArtikelNr' nicht möglich...
weis eine Rat ?? wäre Toll ...Danke
chris
-
Du hast ArtikelNr private gemacht. dann kann auch nur Artikel drauf zugreifen.
Machs protected.
BTW das ist falschArtikel *Buch; Buch = new Buecher(); //Buch.print(); Buch->print();
-
hallo,
Danke für diese schnelle Antwort.
Funktioniert.
Chris
-
btw, Singular von "Buecher" ist "Buch"

-
Nein, protected ist nicht gut. Variablen sollten immer private sein. Du könntest natürlich Getter Methoden implementieren, aber am einfachsten machst du folgendes:
#include <iostream> class Artikel { public: Artikel() : ArtikelNr(100) { } virtual void print() const =0; private: int ArtikelNr; // ... }; // Die Artikel Klasse hat ein print, was die Artikel Informationen ausgibt void Artikel::print() const { std::cout << "Artikel Nummer: " << ArtikelNr << '\n'; } class Buch : public Artikel { public: void print() const; }; void Buch::print() const { Artikel::print(); //Das wird einfach von abgeleiteten Klassen aufgerufen std::cout << "Buch\n"; } int main() { Buch b; b.print(); }