Probleme
- Basiszeiger -> Abgeleitete Klasse = Problem
- Zeiger kann nicht auf die abgeleiteten Eigenschaften zugreifen, da er diese nicht kennt
- Abgeleiteter Zeiger -> Basisklasse = Problem
- Zeiger denkt, dass die abgeleiteten Eigenschaften auch in der BK vorhanden sind
Abgeleitete Klassen
- Abgeleitete Klasse hat alle Eigenschaften der Basisklasse + mehr = mehr Speicherplatz
- Zugriff aus der abgleiteten Klasse nicht auf private Methoden der Basisklasse ( über Set/Get gehen ) <- Memberinitialisiererliste für Konstruktoren
- Überschreiben mittels virtual != Überladung
Figuren
- Konsolte/Terminal = 2 dimensionales Raster als char-Datenfeld[x][y] benutzen
- Line = das schwerste, alles danach = einfach
- Leere Stelle im Terminal = Punkt
Terminal
- Früher
- Terminal = Hardware mit Schnittstelle zum Großrechner
- Jetzt
- Aufbau
- Reagiert nicht auf Mauseingaben
- Prompt ist die Eingabe
- Befehle eingeben wird vom DOS Interpreter verarbeitet
- cls= Konsole leeren
- Spalten/Zeilen-Größe über Rechtsklick =>Eigenschaften veränderbar
Aufgabe:
- 20 Zeilen / 40 50 Sterne
- for-schleife mit cout
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
for (int i=0; i<40;i++)
{
for (int j=0; j<75;j++)
{
cout << "*";
}
cout << endl;
}
return 0;
}
Datenfeld
- frame[x][y]= Zweidimensionales Datenfeld im Sinne eines Rasters
- Fängt unten an an den Koordinaten [0,0]
- Position wird mittels X und Y bestimmt, die durch ein , getrennt werden
Schwarzes Quadrat
Frame-Klasse
- enum color = Zwei Farben, schwarz und weiß (klassisches Terminal)
- Schwarz = ‚ ‚ ( Leerzeichen )
- weiß = ‚*‘ ( Char-Zeichen )
- Frame( ); = Standardkonstruktor
- Clipping = Unerreichbare Punkte ansteuern
int main() {
Frame test;
test.put_point(10,1);
test.frame_dump();
}
*
* File: Frame.cpp
* Author: maximilian.krieg
*
* Created on 12. April 2012, 09:19
*/
#include "Frame.h"
#include <iostream>
using namespace std;
Frame::Frame() {
frame_reset();
}
void Frame::put_point(int x, int y) // Punkt im Frame speichern
{
if (on_frame(x, y)) {
frame[x][y] = on;
}
}
void Frame::frame_reset() // Frame "leeren"
{
for (int x = 0; x < XMAX; x++) {
for (int y = 0; y < YMAX; y++) {
frame[x][y] = off;
}
}
}
void Frame::frame_dump() const // Frame auf die Konsole ausgeben
{
for (int y = YMAX - 1; 0 <= y; --y) {
for (int x = 0; x < XMAX; x++) {
cout.put(frame[x][y]);
}
cout.put('\n');
}
cout.put('\n');
}
bool Frame::on_frame(int x, int y) const // "Clipping"
{
if (XMAX < x) {
return false;
}
if (YMAX < y) {
return false;
}
return true;
}
/*
* File: Frame.h
* Author: maximilian.krieg
*
* Created on 12. April 2012, 09:19
*/
#ifndef FRAME_H
#define FRAME_H
const int XMAX = 55; // Zeichen pro Frame-Zeile
const int YMAX = 34; // Zeilen pro Frame
class Frame {
public:
enum color {
on = ' ', off = '*'
};
Frame();
void put_point(int, int); // Punkt im Frame speichern
void frame_reset(); // Frame "leeren"
void frame_dump() const; // Frame auf die Konsole ausgeben
bool on_frame(int, int) const; // "Clipping"
private:
char frame[XMAX][YMAX];
};
#endif /* FRAME_H */