Einführung in C++ - · PDF fileAttribute Basteln wir nun an der Klasse punkt weiter. Früher sah eine passende Datenstruktur wie folgt aus: punkt p; p.x = 0; Schon existiert eine

Embed Size (px)

Citation preview

  • Einfhrung in C++Einfhrung in C++

  • Aufbau von KlassenAufbau von Klassen Eine wird mit dem Schlsselwort class eingeleitet, und

    endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben.classpunkt{...};

    Im Gegensatz zu Datenstrukturen, welche nur Daten enthalten, knnen Klassen Daten und Funktionen als Elemente enthalten. Der Oberbegriff fr Daten und Funktionen ist Member. Man unterscheidet: Daten-Member (Attribute) Funktions-Member (Methoden)

  • AttributeAttribute Basteln wir nun an der Klasse punkt weiter. Frher sah

    eine passende Datenstruktur wie folgt aus:

    punktp;p.x=0;

    Schon existiert eine Klasse, welche wie eine Datenstruktur gehandhabt werden kann. Der Zugriff erfolgt weiterhin ber den Punktoperator . :

    structpunkt{shortx;shorty;

    };

    Sie enthlt zwei Werte Beispielsweise, Koordinaten. Zur Klasse ist es nun ein kleiner Schritt:classpunkt{public:

    shortx;shorty;};

  • Attribute IIAttribute II

    Bei einem Zugriff mittels:

    erzeugt der Compiler einen Fehler.

    private:shortx;shorty;

    Unter Verwendung von struct oder public nun aber jeder (bewusst oder unbewusst) die Daten ndern. Dies ist oft unerwnscht, bzw. soll nicht erlaubt sein.Verhindert werden kann dies, indem die Daten in einem privaten Bereich abgelegt werden:

    p.x=200;p.y=20;

    Somit knnen wir die Daten immer egal was das Programm damit anstellt - in einem definierten Zustand halten.

  • Methoden IMethoden I

    Nur sie haben uneingeschrnkten Zugriff auf alle Daten ihrer Klasse.

    Hier wurde Funktionen in der Klasse Deklariert als auch ihren Code direkt angegeben.(Fr getter- und setter-Methoden oft blich)

    Diese Member-Funktionen liegen im ffentlichen Teil der Klasse, damit sie jeder verwenden kann:classpunkt{private:

    shortx;shorty;public:

    shortget_x(){return(x);}shortgety(){return(y);}

    };

    Um kontrollierten Zugriff auf die Attribute zu gewhren gibt es Funktionsmember (Methoden)

  • Methoden IIMethoden II

    Nun ist es mglich, den Punkt zu instantiieren und ber die internen Methoden die Koordinatenpunkte zu verndern:

    classpunkt{private:

    shortx;shorty;public:

    shortget_x(){return(x);}shortgety(){return(y);}voidset(shortsx,sy){x=sx;y=sy;}

    };

    Zum schreiben der Daten kann die Klasse erweitert werden:

    intmain(){intx=1;PunktP;P.set(x,5);P.set(P.get_x(),123);return(0);

    }

  • Methoden IIIMethoden III

    classpunkt{private:

    shortx;shorty;public:

    shortget_x(){return(x);}shortgety(){return(y);}voidset(shortsx,sy){x=sx;y=sy;}voidzeichne();

    };

    Bei umfangreichen Methoden ist es allerdings sinnvoll, Deklaration und Implementierung zu trennen. Dazu wird die Methode innerhalb der Klasse deklariert und auerhalb implementiert:

  • Methoden IVMethoden IV

    punkt::zeichne(){cout

  • KonstruktorKonstruktor Gewhnlich sollten Attribute nur ber ihre getter- und

    setter-Methoden zugnglich sein. Hierber erfolgt auch ihre erstmalige Belegung.

    Um zu verhindern, dass beim Instantiieren eines Objektes ein undefinierter Zustand auftritt, gibt es sog. Konstruktoren.classpunkt{private:

    shortx;shorty;public:

    punkt(){x=0;y=0;}//parameterloserKonstruktorpunkt(shortsx,shortsy){set(sx,sy);}shortget_x(){return(x);}shortgety(){return(y);}voidset(shortsx,sy){x=sx;y=sy;}voidzeichne();

    };

  • KonstruktorKonstruktor Konstruktoren haben den selben Namen wie ihre

    Klasse, und werden automatisch beim instantiieren aufgerufen.

    Eine Klasse kann einen, keinen oder auch mehrere Konstruktoren haben.

    Gibt es mehrere Konstruktoren, so mssen sich diese anhand der Parametersignatur (Anzahl der Variablen oder/und Typ der Variablen) unterscheiden.

    Im Konstruktor werden dann alle notwendigen Initialisierungen durchgefhrt. Das Anwendungs-programm darf diesen Prozess allenfalls Parametrisieren.

  • DestruktorDestruktor Neben einem Konstruktor kann eine Klasse einen (und

    nur einen!) Destruktor haben. Er ist parameterlose Funktion, die wie der Konstruktor

    keinen Rckgabewert haben. Als Name dient der Klassennamen, mit einer

    vorangestellten Tilde ~ Er dient dazu, zur Beseitigung des Objekts anfallende

    Aufrumarbeiten zu erledigen (Speicherfreigabe)classpunkt{private:

    shortx;shorty;public:

    punkt(){x=0;y=0;}...voidzeichne();~punkt(); //Destruktor

    };

  • berladen von Funktionenberladen von Funktionen

    intnaechste(inta){return(++a);

    }intnaechste(inta,intb){

    return(a+b);}charnaechste(chara,intb){

    returnstatic_cast(a+b);}intmain(){

    cout

  • Instantiierung von ObjektenInstantiierung von Objekten Wie bei Datenstrukturen knnen wir nun Variablen (in

    C++ Instanzen einer Klasse) anlegen. Diese knnen wie in C automatisch, statisch oder

    dynamisch angelegt werden. Objekte werden automatisch instantiiert, wenn eine

    Variable dieser Klasse in einem Block angelegt wird.

    Es muss einen von der Parametersignatur her passen-den Konstruktor geben, der zur Ausfhrung kommt

    voidzeichnung(){kreiskopf(100,50,20,SCHWARZ);rechteckrumpf(170,80,21,SCHWARZ);liniebein1(200,80,50,50,SCHARZ);...kopf.draw();.....

    }

  • Instantiierung von Objekten IIInstantiierung von Objekten II Bei statischen Objekten wird zwischen Objekten, die

    auerhalb- und Objekten, die innerhalb einer Funktion angelegt werden.

    Beispiel zeichnung(): statickreiskopf(100,50,20,SCHWARZ);staticrechteckrumpf(170,80,21,SCHWARZ);

    voidzeichnung(){staticliniebein1(200,80,50,50,SCHARZ);staticliniebein2(230,80,30,250,SCHARZ);...kopf.draw();.....

    }

  • Instantiierung von Objekten IIIInstantiierung von Objekten III Statische Objekte auerhalb von Funktionen (also vor

    main()) werden vor Programmstart initialisiert. Innerhalb von Funktionen werden statische Objekte

    einmal initialisiert, sobald sie vom Programmdurchlauf erreicht werden.

    Sie werden erst nach Beendigung des gesamten Programms in umgekehrter Reihenfolge ihrer Instantiierung entfernt.

    Folie 1Folie 2Folie 3Folie 4Folie 5Folie 6Folie 7Folie 8Folie 9Folie 10Folie 11Folie 12Folie 13Folie 14Folie 15