Programmieren 1 - Strukturen - Klassen - Objekte

Programmieren 1 - Strukturen - Klassen - Objekte Programmieren 1 - Strukturen - Klassen - Objekte

01.03.2014 Aufrufe

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

<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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!