Operator [ ] rundet Wert
-
Hallo Manni,
Danke für Deinen Input,
Da hast Du recht in allen Punkten.MfG, Dirk
-
Guten Abend,
also hier ist die vollständige main:// A_19_6_MAIN.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung. // //#include "stdafx.h" #include "general_definitions.h" #if RUN_Uebung_19_6 == 1 #include <iostream> #include <fstream> #include "19_6_class_Point_3D.hpp" void Test_InneresProdukt_2er_Punkte( void ); void Test_Produkt_doubleZahl_x_Punkt( void); void Test_Punkt_1_minus_Punkt_2( void); int main( void ) { Point3D p1, p2; // Auruf Deufault Konstruktor Point3D p3(20, 40, 60), p4(4, 6, 8); // Auruf Konstruktor mit Para. std::cout << "\n=============== Uebung 19.6 Operatoren ==============" << std::endl << "Es wurden 4 Punkte angelegt, ihre Werte lauten:" << std::endl << "p1: " << std::setprecision(2) << p1 << std::endl << "p2: " << std::setprecision(2) << p2 << std::endl << "p3: " << std::setprecision(2) << p3 << std::endl << "p4: " << std::setprecision(2) << p4 << std::endl; //Test Setter std::cout << "\n\nManipulieren mit Setter, p1 auf 4.456, 5.34, 68" << std::endl; p1.Set_x(4.456); p1.Set_y(5.34); p1.Set_z(68); std::cout << "p1: " << p1 << std::endl; //Test operator - std::cout << "\n\nOperator '-=' Test: \n p1( 4.456, 5.34, 68 )" << " -= p2( 1.00, 2.34, 8.00 ) ergibt:" << std::endl; p2.Set_x(1.00); p2.Set_y(2.34); p2.Set_z(8.00); p1 -= p2; // '-=' Operator wirkt hier std::cout << " p1" << p1 << std::endl; //Funktioniert. //Test Operator [] ... neu hinzu bei 19.6 p1.Set_x(4); p1.Set_y(4.5687); p1.Set_z(5.67); std::cout << "\n\nOperator '[]' Test: \n p1( 4; 4,5687; 5,67 )" << " Jetzt Ausgabe des y-Elementes von p1:" << std::endl; std::cout << " p1[1] = " << p1[1] << std::endl; Test_InneresProdukt_2er_Punkte(); //19.6 Test_Produkt_doubleZahl_x_Punkt(); //19.6 Test_Punkt_1_minus_Punkt_2(); //19.6 system("pause"); return 0; } void Test_InneresProdukt_2er_Punkte(void) //Test i.O. 2.2. 2020 { //1. Überladung Operator * ... neu hinzu bei 19.6 Point3D p1(2.2, 3.3, 4.4), p2(1.1, 1.2, 2.0); std::cout << "\n\nTest des inneren Produktes aus 2 Punkten im 3D-Raum" << "\n p1( 2.2, 3.3, 4,4 ) und p2( 1.1, 1.2, 2.0 )" << "\n Das Ergebnis muss 2.42, 3.96, 8.8 lauten:" << "\n p1 * p2 = " << p1 * p2 << std::endl; } void Test_Produkt_doubleZahl_x_Punkt(void) //Test i.O. 2.2. 2020 { //2. Überladung Operator * ... neu hinzu bei 19.6 Point3D p1(2.2, 3.3, 4.4); double z; z = 1.3; std::cout << "\n\nTest Produkt double-Zahl mit Punkt im 3D-Raum" << "\n p1( 2.2, 3.3, 4.4 ) und double-Zahle = 1.30" << "\n Das Ergebnis muss 2.86, 4.29, 5.72 lauten:" << "\n p1 * 1.3 = " << p1 * z << std::endl; } void Test_Punkt_1_minus_Punkt_2(void) //Test i.O. 2.2 2020 { //2. Überladung Operator - ... neu hinzu bei 19.6 Point3D p1(2.2, 3.3, 4.4), p2(1.1, 2.2, 1.39); // p2 muss fuer diese Überladung als Zeiger übergeben werden std::cout << "\n\nTest Subtraktion 2er Punkte im 3D-Raum" << "\n p1( 2.2, 3.3, 4.4 ) und p2( 1.1 , 2.2 , 1.39 )" << "\n Das Ergebnis p1 - p2 muss 1.1, 1.1, 3.01 lauten:" << "\n p1 - p2 = " << p1 - &p2 << std::endl; } //p1 wird dabei nicht verändert, wenn man das Ergebnis //speichern will muss man in neuen Punkt schreiben oder //in p1 schreiben: p1 = p1 - p2; das geht. #endif //if RUN_Uebung_19_6 == 1 // EOF
... Und hier noch der Vollständigkeit halber
das File mit den Define-Schaltern:#pragma once #ifndef general_definitions_H_ #define general_definitions_H_ // Fuer Uebung zu Operatoren // // Uebungsbuch: "C++ Das Übungsbuch" 3. Auflage // // Autoren Peter Prinz, Ulla Kirch-Prinz // #define RUN_Uebung_19_5 0 //Thema: Point 3D #define RUN_Uebung_19_6 0 //Thema: Point 3D #define RUN_Uebung_19_7 1 //Thema: Student Scores #define RUN_Uebung_19_8 0 #define RUN_Uebung_19_9 0 #define RUN_Uebung_19_10 0 #if RUN_Uebung_19_5 + RUN_Uebung_19_6 + RUN_Uebung_19_7 \ + RUN_Uebung_19_8 + RUN_Uebung_19_9 + RUN_Uebung_19_10 != 1 # error " You Have to Choose 1 Option! " #endif #endif //general_definitions_H_ // EOF
Schönen Abend euch ..
-
@manni66 sagte in Operator [] rundet Wert:
Ein double wird nicht doubliger.
-
.. Ja den fand ich auch zum schmunzeln, recht hat er !
-
@0xFF Nur ein ganz kleiner Tipp. Nimm für die Übungen in der Konsole statt system("pause") zB
void ready() { std::cerr << "\nready_\n"; std::cin.sync(); std::cin.get(); }
Nur um das rauszuhaben plus auf Tastendruck warten
-
Jo, Danke für den Tip!
-
@0xFF
std::setprecision(2)
da ist doch der Übeltäter
-
-
@Swordfish sagte in :
@0xFF sagte in Operator [] rundet Wert:
exit(1);
lass das!
Wichtiger wäre, die Fehlerausgabe wegzulassen. Es ist nicht der Job von
operator[]
, den Benutzer zu belehren. Die Funktion sollte eine Vorbedingung,0 <= index && index < 3
, haben, dokumentieren, und mitassert
abprüfen. Das genügt. Es liegt dann in der Verantwortung des Aufrufers, einen gültigen Index zu übergeben.
-
@Bashar
Jup, das stimmt, war eben in der Übung so gefordert, sollte aber
bei einem Professionellen Programm anders abgefangen werden,
Danke für den Hinweis.
@Schlangenmensch
Ja, ich war der Meinung std::setprecision wirkt nur bis zum nächsten
Aufruf von cout ...