Wenn fertig, bitte Fenster schließen
// Lösung zu virtuellen Memberfunktionen // Zuerst Dateien einbinden #include <iostream> #include <string> // Nun Namensraum auf std setzen using namespace std; // Definition der Basisklasse CWinBase // CWinBase enthält die Grunddaten zur Beschreibung eines Fensters // HINWEIS: Der protected-Konstruktor verhindert dass ein Objekt // der Klasse CWinBase direkt erzeugt werden kann! Der Destruktor // dagegen muss public sein class CWinBase { short nXPos, nYPos; // Koordinaten des Fensters short nWidth, nHeight; // Grösse des Fensters protected: // protected Konstruktor! CWinBase(short nXP, short nYP, short nW, short nH); public: virtual ~CWinBase() // virtueller public-Destruktor {} virtual void Draw() const = 0; // pure virtual Memberfunktionen }; // Definition der Memberfunktionen // Konstruktor CWinBase::CWinBase(short nXP, short nYP, short nW, short nH) { nXPos = nXP; nYPos = nYP; nWidth = nW; nHeight = nH; } // Ausgabe der Position und Grösse void CWinBase::Draw() const { cout << "Position: (" << nXPos << "," << nYPos << ")\n"; cout << "Grösse : (" << nWidth << "," << nHeight << ")\n"; } // Definition der Klasse CWindow class CWindow: public CWinBase { string sTitle; // Beschriftung public: CWindow(short, short, short, short, const char *const); void Draw() const; }; // Definition der Memberfunktionen // Konstruktor CWindow::CWindow (short nX, short nY, short nW, short nH, const char *const pszT): CWinBase(nX, nY, nW, nH), sTitle(pszT) { } // Ausgabe der Fensterdaten void CWindow::Draw() const { CWinBase::Draw(); cout << "Beschriftung: " << sTitle << endl; } // Definition der Klasse CButton class CButton: public CWindow { short nButtonID; // Button-Nummer public: CButton(short, short, short, short, const char *const, short); void Draw() const; }; // Definition der Memberfunktionen // Konstruktor CButton::CButton (short nX, short nY, short nW, short nH, const char *const pszT, short nBID): CWindow(nX, nY, nW, nH, pszT), nButtonID(nBID) { } // Ausgabe der Buttondaten void CButton::Draw() const { // Achtung! Es wird Draw() von CWindow aufgerufen! CWindow::Draw(); cout << "Button-ID: " << nButtonID << endl; } // main() Funktion int main() { // Feld für 2 Objektzeiger definieren CWinBase *pCObjects[2]; // Fenster-Objekt erzeugen pCObjects[0] = new CWindow(10,10,200,100,"Fensterobjekt"); // Button-Objekt erzeugen pCObjects[1] = new CButton(50,50,100,50,"Buttonobjekt",10); // Objektdaten ausgeben cout << "Daten des CWindow-Objekts:\n"; pCObjects[0]->Draw(); cout << "\nDaten des CButton-Objekts:\n"; pCObjects[1]->Draw(); // Objekte wieder löschen! delete pCObjects[0]; delete pCObjects[1]; } |