Breymann. C++ Einführung und professionelle Programmierung
Breymann. C++ Einführung und professionelle Programmierung Breymann. C++ Einführung und professionelle Programmierung
9.2.4 Multiplikations-Operator Anwendung v1 *= 1.23; template mathVektor& mathVektor::operator*=(T zahl) { } for(int i = 0; i < xDim; ++i) // elementweise Multiplikation: start[i] = start[i]*zahl; return *this; // privat? xDim und start könnten auf den ersten Blick als private Attribute der Oberklasse Vektor entworfen worden und deswegen nicht zugreifbar sein! Abhilfe: 1. In der Oberklasse private durch protected ersetzen. Dann haben alle von Vektor abgeleiteten Klassen Zugriff auf diese Variablen. 2. Die zweite Möglichkeit besteht darin, nur geerbte, öffentliche Methoden zu verwenden: Breymann C++, c○ Hanser Verlag München Inhalt ◭◭ ◭ ◮ ◮◮ 394 zurück Ende
Version 2 template mathVektor& mathVektor::operator*=(T zahl) { } for(int i = 0; i < Groesse(); ++i) operator[](i) = operator[](i)*zahl; return *this; Diese Möglichkeit ist trotz inlining etwas langsamer, weil der Index geprüft wird. Bei 1. geschieht der Zugriff direkt über start. Jetzt kann die Multiplikation eines beliebig großen Vektors sehr einfach geschrieben werden, zum Beispiel: mathVektor v1(100), v2(200); //... // alle Elemente von v1 multiplizieren v1 *= 1.234567; Aber was ist mit v1 = v2 * 1.234567; oder v1 = 1.234567 * v2; ? Breymann C++, c○ Hanser Verlag München Inhalt ◭◭ ◭ ◮ ◮◮ 395 zurück Ende
- Seite 344 und 345: virtual void zeichnen() const { Rec
- Seite 346 und 347: 8.6.1 Namenskonflikte cout
- Seite 348 und 349: Subobjekt1: GraphObj Subobjekt2: Gr
- Seite 350 und 351: eschriftetesRechteck(const Ort &O,
- Seite 352 und 353: 8.6.3 Virtuelle Basisklassen und In
- Seite 354 und 355: class Unten: public Links, public R
- Seite 356 und 357: class Unten: public Links, public R
- Seite 358 und 359: class Rechteck { public: virtual vo
- Seite 360 und 361: Ohne Vererbung (Delegation): class
- Seite 362 und 363: 8.7.2 Der Teil und das Ganze „Tei
- Seite 364 und 365: } Bekanntenkreis.Hinzufuegen(&P); S
- Seite 366 und 367: 8.7.4 „Benutzt“-Beziehung Ein O
- Seite 368 und 369: ReturnDatentyp Klassenname::operato
- Seite 370 und 371: 1. Der Aufruf wird entsprechend der
- Seite 372 und 373: drei Fälle für gemischte Datentyp
- Seite 374 und 375: Ohne Typumwandlungskonstruktor Um g
- Seite 376 und 377: Mit Typumwandlungskonstruktor Wenn
- Seite 378 und 379: 9.1.2 Ausgabeoperator
- Seite 380 und 381: ✬ ✩ Vektor-Objekt start xDim (=
- Seite 382 und 383: Zuweisungsoperator Vektor& operator
- Seite 384 und 385: template inline void Vektor::init(c
- Seite 386 und 387: Zuweisung von Vektorelementen per W
- Seite 388 und 389: Möglicher Einsatz: Vektor v(5); //
- Seite 390 und 391: template inline Vektor &Vektor::ope
- Seite 392 und 393: 9.2.3 Mathematische Vektoren Vektor
- Seite 396 und 397: * Operator für den Fall v1 = zahl*
- Seite 398 und 399: Um bereits vor der Konstruktion ein
- Seite 400 und 401: void Datum::aktuell() { // Systemda
- Seite 402 und 403: Der Postfix-Inkrementierungsoperato
- Seite 404 und 405: datum.h #include class Datum { // .
- Seite 406 und 407: Es ist sowohl die implizite als auc
- Seite 408 und 409: 3. errno setzen 4. Fehlerbehandlung
- Seite 410 und 411: Wege zur Fehlerbehandlung: • Den
- Seite 412 und 413: gegebenenfalls weitere catch-Blöck
- Seite 414 und 415: 10.1.2 Exception-Hierarchie in C++
- Seite 416 und 417: Breymann C++, c○ Hanser Verlag M
- Seite 418 und 419: Große Teile des Konzepts sind durc
- Seite 420 und 421: 11.1 Die C++ Standardbibliothek, ge
- Seite 422 und 423: 11.1.1 Abstrakte und implizite Date
- Seite 424 und 425: 11.1.2 Bauelemente Container Klasse
- Seite 426 und 427: Allen Containern gemeinsam sind auc
- Seite 428 und 429: Iteratoren = Objekte, die auf Eleme
- Seite 430 und 431: Vorhandene Algorithmen: for_each fi
- Seite 432 und 433: } int Zahl = 0; do { cout > Zahl; I
- Seite 434 und 435: Variante 2: Prototyp durch Template
- Seite 436 und 437: } do { cout > Zahl; // Benutzung vo
- Seite 438 und 439: 11.2 Iteratoren im Detail Iteratore
- Seite 440 und 441: 11.2.1 Iteratorkategorien → sind
- Seite 442 und 443: • Random-Access-Iterator wie Bidi
9.2.4 Multiplikations-Operator<br />
Anwendung v1 *= 1.23;<br />
template<br />
mathVektor& mathVektor::operator*=(T zahl) {<br />
}<br />
for(int i = 0; i < xDim; ++i)<br />
// elementweise Multiplikation:<br />
start[i] = start[i]*zahl;<br />
return *this;<br />
// privat?<br />
xDim <strong>und</strong> start könnten auf den ersten Blick als private Attribute der<br />
Oberklasse Vektor entworfen worden <strong>und</strong> deswegen nicht zugreifbar<br />
sein!<br />
Abhilfe:<br />
1. In der Oberklasse private durch protected ersetzen. Dann haben<br />
alle von Vektor abgeleiteten Klassen Zugriff auf diese Variablen.<br />
2. Die zweite Möglichkeit besteht darin, nur geerbte, öffentliche Methoden<br />
zu verwenden:<br />
<strong>Breymann</strong> <strong>C++</strong>, c○ Hanser Verlag München<br />
Inhalt ◭◭ ◭ ◮ ◮◮ 394 zurück Ende