Programmieren 1 - Strukturen - Klassen - Objekte
Programmieren 1 - Strukturen - Klassen - Objekte Programmieren 1 - Strukturen - Klassen - Objekte
Objekte als Parameter Beispiel //Deklaration class Counter { int value_; public: // Konstruktoren void higher(); void higher(int); void higher(Counter); }; überladene Memberfunktionen Objekt als Parameter! //Implementation void Counter::Counter() { /* … */ } void Counter::Counter( int v ) {/* … */} void Counter::higher() {/* … */} void Counter::higher( int soViel ) {/* … */} 19.04.2012 //Anwendung void main() { Counter c1, c2(10); c1.higher( c2 ); } ruft auf Was ist hier falsch? FB Informatik Prof. Dr. R.Nitsch Aktion? Copy-Konstruktor wird implizit aufgerufen, um Kopie auf dem Stack zu erzeugen. void Counter::higher( Counter c ) { value_ = value_ + c.value_; } Zugriffschutz? oder besser void Counter::higher( Counter c ) { higher(c.value_); // Wiederverwendeter Code } 22.04.2013 22
Vorgegebene Parameterwerte und variable Parameterzahl /113/ FB Informatik Prof. Dr. R.Nitsch Beispiel 1 class Counter { int value; Counter( int init = 0 ); … optionaler Parameter mit default-Wert } Konsequenz: Dieser Konstruktor • kann mit 0 oder 1 Parameter aufgerufen werden! • ersetzt Counter() und Counter(int) • ermöglicht schmalere Schnittstelle int main() { Counter c1(10); Counter c2; … } Aktueller Parameter (=10) wird benutzt Default-Wert (=0) wird benutzt //Implementation Counter::Counter( int init ) { value_ = init; } Achtung: hier (bei Implementierung) ist kein opt. Parameter erlaubt! 22.04.2013 23
- Seite 1 und 2: FB Informatik Prof. Dr. R.Nitsch Pr
- Seite 3 und 4: Funktionsorientierte Programmierung
- Seite 5 und 6: Funktionsorientiert versus Objektor
- Seite 7 und 8: Funktionsorientiert versus Objektor
- Seite 9 und 10: Unified Modelling Language (UML) FB
- Seite 11 und 12: Praktikumsaufgabe 2: string toStrin
- Seite 13 und 14: Hörsaalübung "Eine Motorbootfahrt
- Seite 15 und 16: Hörsaalübung "Eine Motorbootfahrt
- Seite 17 und 18: Struktur und Syntax einfacher OO-Pr
- Seite 19 und 20: Ein einfaches Beispiel - Datentyp C
- Seite 21: Überladene Methoden/Funktionen FB
- Seite 25 und 26: Methoden verwenden (andere) Methode
- Seite 27 und 28: Beispiele Objekt a1 KlasseA Objekt
- Seite 29: Konzept der friend-Funktionen FB In
<strong>Objekte</strong> als Parameter<br />
Beispiel<br />
//Deklaration<br />
class Counter<br />
{<br />
int value_;<br />
public:<br />
// Konstruktoren<br />
void higher();<br />
void higher(int);<br />
void higher(Counter);<br />
};<br />
überladene Memberfunktionen<br />
Objekt als<br />
Parameter!<br />
//Implementation<br />
void Counter::Counter() { /* … */ }<br />
void Counter::Counter( int v ) {/* … */}<br />
void Counter::higher() {/* … */}<br />
void Counter::higher( int soViel ) {/* … */}<br />
19.04.2012<br />
//Anwendung<br />
void main() {<br />
Counter c1, c2(10);<br />
c1.higher( c2 );<br />
}<br />
ruft auf<br />
Was ist hier falsch?<br />
FB Informatik<br />
Prof. Dr. R.Nitsch<br />
Aktion?<br />
Copy-Konstruktor<br />
wird implizit aufgerufen,<br />
um Kopie auf<br />
dem Stack zu erzeugen.<br />
void Counter::higher( Counter c ) {<br />
value_ = value_ + c.value_;<br />
}<br />
Zugriffschutz?<br />
oder besser<br />
void Counter::higher( Counter c ) {<br />
higher(c.value_); // Wiederverwendeter Code<br />
}<br />
22.04.2013 22