Programmieren, Algorithmen und Datenstrukturen 2 (Vorlesung 6)

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 
    • Terminal = SW
  • 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 */
Maximilian
Maximilian

Herzlich willkommen! Ich bin Max, ein Informatiker mit über 15 Jahren Berufserfahrung. Hier teile ich meine Leidenschaften, Erlebnisse und Perspektiven. Ich lade dich ein, gemeinsam mit mir auf eine Entdeckungsreise zu gehen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.