Vergleichsoperatorüberladung bei Zeigern
-
Hallo,
ich habe das Problem dass ich Zeiger auf ein Array habe und zwei Objekte die in dem Array gespeichert sind vergleichen möchte. Genauer gesagt ich habe die Klasse:
class Auto { public: int Alter; int Preis; int Marke; int Typ; Auto(){}; Auto(int age, int price, int brand, int type):Alter(age), Preis(price), Marke(brand), Typ(type){}; void datenausgeben() //Funktion zum Datenausgeben {.....} };Ich bilde zwei Instanzen dieser Klasse und speichere die in einem Array das "Auto_Array" heißt. Nun möchte ich über den Vergleichsoperator "==" diese beiden Objekte vergleichen. Also eigentlich einfach
Auto_Array(0) == Auto_Array(1)Das funktioniert aber ja nicht weil er dann immer denkt sie sind unterschiedlich weil er ja die Adressen vergleicht. Jetzt komme ich leider mit meinen Unterlagen überhaupt nicht klar in denen eigentlich beschrieben sein soll wie das mit der Operator Überladung und der Deklaration des Vergleichsoperators funtioniert. Bzw. den Aufruf verstehe ich dann nicht. Also die Deklaration müsste ja irgendwie so aussehen:
bool operator == (const Auto&, const Auto&);Dabei sollte er ja dann die beiden Instanzen vergleichen wenn "==" aufgerufen wird.
Also irgendwie funktioniert das aber nicht. Ich weis nicht mehr weiter und muss heute noch eine Aufgabe abgeben in der das passieren soll. Kann mir bitte irgendjemand weiter helfen?
Danke schonmal.
-
laura84 schrieb:
Also irgendwie funktioniert das aber nicht.
Na dann ist ja alles klar.
Bitte mehr von dem was du gemacht hast zeigen und beschreiben, was genau nicht geht. An sich klingt deine Beschreibung nämlich richtig, außer dass du die Arraysyntax falsch hast (Tippfehler?). Und was du mit den Zeigern meinst, kapiere ich nicht.
-
bool operator == (const Auto new_auto) return ( (new_auto.Alter == Alter) &&(new_auto.Preis == Preis) &&(new_auto.Marke == Marke) &&(new_auto.Typ == Typ) );Höre gerade Hip Hop, garantiere also keine Richtigkeit

-
Danke schonmal für die Antworten so ähnlich wie Kóyaánasqatsi das beschreibt habe ich es auch schonmal versucht. Gut dann hier mal mein kompletter Quellcode.
Klasse:
#include <iostream> using namespace std; class Auto { //private: public: int Alter; int Preis; int Marke; int Typ; //public: Auto(){}; Auto(int age, int price, int brand, int type):Alter(age), Preis(price), Marke(brand), Typ(type){}; void datenausgeben() //Funktion zum Datenausgeben {} }; bool operator == (const Auto&, const Auto&);Main:
#include <iostream> #include "Auto.h" using namespace std; bool operator == (int age, int price, int brand, int type) { return li.Alter == re.Alter && li.Marke == re.Marke && li.Preis == re.Preis && li.Typ == re.Typ; } int main() { Auto *Auto_Array[2]; int Anzahl_Auto = 0; int choice = 0; int car_brand = 0; int car_type = 0; int auswahl1 = 0; int auswahl2 = 0; int auswahl3 = 0; int alter = 0; int preis = 0; while (choice != 4) { system("cls"); cout << "***** HAUPT MENUE *****" << endl << endl; cout << "1. Fahrzeug anlegen" << endl; cout << "2. Fahrzeuge anzeigen" << endl; cout << "3. Fahrzeuge vergleichen" << endl; cout << "4. Programmende" << endl << endl; cout << "Auswahl: "; cin >> choice; system("cls"); switch (choice) { case 1: auswahl1 = 0; while (auswahl1 !=5) { system("cls"); cout << "***** FAHRZEUG ANLEGEN *****" << endl << endl; cout << "1 Marke angeben" << endl; cout << "2 Typ angeben" << endl; cout << "3 Alter eingeben" << endl; cout << "4 Preis eingeben" << endl; cout << "5 Hauptmenue" << endl << endl; cout << "Auswahl: "; cin >> auswahl1; switch (auswahl1) { case 1: //Markeneingabe system("cls"); cout << "Waehlen Sie eine der folgenden Marken:" << endl << endl; cout << "1 BMW" << endl; cout << "2 Mercedes" << endl; cout << "3 VW" << endl; cout << "4 Audi" << endl; cout << "5 Toyota" << endl; cout << "6 Peugeot" << endl; cout << "7 Skoda" << endl; cout << "8 Ford" << endl; cout << "9 Opel" << endl << endl; cout << "Auswahl: "; cin >> auswahl2; switch (auswahl2) { case 1: cout << "BMW" << endl << endl; car_brand = 1; break; case 2: cout << "Mercedes" << endl << endl; car_brand = 2; break; case 3: cout << "VW" << endl << endl; car_brand = 3; break; case 4: cout << "Audi" << endl << endl; car_brand = 4; break; case 5: cout << "Toyota" << endl << endl; car_brand = 5; break; case 6: cout << "Peugeot" << endl << endl; car_brand = 6; break; case 7: cout << "Skoda" << endl << endl; car_brand = 7; break; case 8: cout << "Ford" << endl << endl; car_brand = 8; break; case 9: cout << "Opel" << endl << endl; car_brand = 9; break; } getchar(); break; case 2: //Typeingabe system("cls"); cout << "Waehlen Sie einen Autotyp:" << endl << endl; cout << "1 Kleinwagen" << endl; cout << "2 Kombi" << endl; cout << "3 Sportwagen" << endl; cout << "4 Kastenwagen" << endl; cout << "5 SUV" << endl; cout << "6 Kleinlaster" << endl; cout << "7 LKW" << endl << endl; cout << "Auswahl: "; cin >> auswahl3; switch (auswahl3) { case 1: cout << "Kleinwagen" << endl << endl; car_type = 1; break; case 2: cout << "Kombi" << endl << endl; car_type = 2; break; case 3: cout << "Sportwagen" << endl << endl; car_type = 3; break; case 4: cout << "Kastenwagen" << endl << endl; car_type = 4; break; case 5: cout << "SUV" << endl << endl; car_type = 5; break; case 6: cout << "Kleinlaster" << endl << endl; car_type = 6; break; case 7: cout << "LKW" << endl << endl; car_type = 7; break; } getchar(); break; case 3: //Alterseingabe system("cls"); cout << "Geben Sie das Alter des Autos ein: "; cin >> alter; getchar(); break; case 4: //Preiseingabe system("cls"); cout << "Geben Sie den Preis des Autos ein: "; cin >> preis; getchar(); break; case 5: //Hauptmenue und Speichern Auto_Array[Anzahl_Auto] = new Auto(alter, preis, car_brand, car_type); Anzahl_Auto = Anzahl_Auto + 1; break; } } getchar(); break; case 2: system("cls"); cout << "***** Anzeigen *****" << endl << endl; for (int h = 0; h < Anzahl_Auto; h++) { cout << "Auto " << h + 1 << ": " << endl; Auto_Array[h]->datenausgeben(); } getchar(); getchar(); break; case 3: system("cls"); cout << "***** Vergleichen *****" << endl << endl; bool test = operator == (Auto_Array[0], Auto_Array[1]); //if (Auto_Array[0] == Auto_Array[1]) if(test) { cout << "Die Autos sind identisch!" << endl; } else { cout << "Die Autos sind verschieden!" << endl; } getchar(); getchar(); break; } } return 0; }Die Fette Zeile ist mein eigentliches Problem denke ich. Und das mit dem "const" stimmt denke ich auch nicht. Mit den Zeigern meinte ich "Auto_Array[0]" und "Auto_Array[1]" und dass die beiden verglichen werden müssten und da dann nur die Adressen verglichen werden und die natürlich immer verschieden sind.
-
Doppelpost
-
Was bitte soll das sein?
bool operator == (int age, int price, int brand, int type) { return li.Alter == re.Alter && li.Marke == re.Marke && li.Preis == re.Preis && li.Typ == re.Typ; }Das ist doch ganz was anderes als die eigentliche Signatur:
bool operator == (const Auto&, const Auto&);Und wenn Auto_Array bei dir vom Typ *Auto[] ist (warum eigentlich? Du machst ja nichts dynamisches), dann musst du eben vor dem Vergleich dereferenzieren:
*Auto_Array[0] == *Auto_Array[1]Du solltest dir aber nochmal überlegen, ob du da wirklich Zeiger brauchst.
-
SeppJ schrieb:
Was bitte soll das sein?
bool operator == (int age, int price, int brand, int type) { return li.Alter == re.Alter && li.Marke == re.Marke && li.Preis == re.Preis && li.Typ == re.Typ; }Das ist doch ganz was anderes als die eigentliche Signatur:
bool operator == (const Auto&, const Auto&);Sorry, das habe ich aus versehen drin gelassen. War nur mal so ein Versuch.
SeppJ schrieb:
Und wenn Auto_Array bei dir vom Typ *Auto[] ist (warum eigentlich? Du machst ja nichts dynamisches), dann musst du eben vor dem Vergleich dereferenzieren:
*Auto_Array[0] == *Auto_Array[1]Du solltest dir aber nochmal überlegen, ob du da wirklich Zeiger brauchst.
Naja, ich soll halt zwei Autos anlegen und das hab ich halt dann mit einem Array gelöst. Ich weis dass ich das auch anders lösen könnte, aber dann würde ich es ja nie lernen wie das mit Zeigern funktioniert. Und es funktioniert ja so irgendwie, oder? So oder so ähnlich steht das zumindest in meinen Unterlagen aber die hab ich eben nicht richtig verstanden.
-
Ich dachte das Problem wäre, dass es nicht funktioniert

Geht es denn mit den Tipps?
-
Okay Sorry, ich hatte vergessen das gleich auszuprobieren.
Es klappt jetzt mit der vorherigen Dereferenzierung. Ich hatte das schon mal irgendwie probiert, aber anscheinend falsch, jetzt klappts. Vielen Dank!