methode auf 2 instanzen anwenden
-
hallo,
gibt es eine möglichkeit eine methode zu verwenden, bei der attribute aus 2 verschiedenen instanzen miteinander verglichen werden?
void Auto:: eingabe_nutzer1(void)
{ cout << "Marke: " ;
cin >> marke1; .... }
void Auto:: eingabe_nutzer2(void)
{ ... cout << "Marke: " ;
cin >> marke2; ... }
cout << "Vergleich startet..." << endl;
if (marke1 == marke2)
{cout << "Marken... }
int main ()
{ Auto Auto1;
Auto1.hallo();
Auto1.eingabe_nutzer1();
Auto Auto2;
Auto2.eingabe_nutzer2();
Auto2.vergleich(); <-- welche instanz muss ich hier dann wählen?
system ("PAUSE");
return 0;}wenn ich das so ausführe, dann hab ich zwar keinen compilerfehler, aber er vergleicht auch nicht! es erfolgt keine ausgabe!
-
Du machst entweder eine Methode, wo du eine Instanz des gleichen Typs als Parameter übergibst, oder eine Funktion, wo du zwei Instanzen des selben Typs übergibst.
-
bine01 schrieb:
hallo,
gibt es eine möglichkeit eine methode zu verwenden, bei der attribute aus 2 verschiedenen instanzen miteinander verglichen werden?
void Auto:: eingabe_nutzer1(void) { cout << "Marke: " ; cin >> marke1; .... } void Auto:: eingabe_nutzer2(void) { ... cout << "Marke: " ; cin >> marke2; ... } cout << "Vergleich startet..." << endl; if (marke1 == marke2) {cout << "Marken..."; } int main () { Auto Auto1; Auto1.hallo(); Auto1.eingabe_nutzer1(); Auto Auto2; Auto2.eingabe_nutzer2(); Auto2.vergleich(); // <-- welche instanz muss ich hier dann wählen? system ("PAUSE"); return 0;}wenn ich das so ausführe, dann hab ich zwar keinen compilerfehler, aber er vergleicht auch nicht! es erfolgt keine ausgabe!
Hallo,
willkommen im C++-Forum.
Ein Tipp vorne weg: wenn Du Code-Tags benutzt, sieht Dein geposteter Code besser aus. Das ist der [C/C++]-Button unter dem Eingabefenster. Ach ja - es muss natürlich korrekter C++-Code sein, sonst klappt die Darstellung nicht.Zwei Instanzen einer Klasse kannst Du im Prinzip so vergleichen, wie Du auch zwei ints vergleichst. Also mit
if( Auto1 == Auto2 ) { // sind gleich ..Dazu muss aber ein Vergleichsoperator in der Klasse existieren. Etwa so:
class Auto { public: // ... bool operator==( const Auto& b ) const; // ... }; // Implementierung: bool Auto::operator==( const Auto& b ) const { if( m_irgendeinMember == b.m_irgendeinMember ) return true; return false; }:xmas2: Werner
-
Wie sieht denn die Funktion vergleich aus?
Achja und benutz bitte die cpp-Tags. Man kann das kaum lesen.
Wie ich das verstehe, musst du die Funktion so implementieren, dass sie ein Objekt des gleichen Types nimmt und dann kannst du einen Vergleich machen. Dann spielt es keine Rolle, bei welchem Objekt du die Funktion aufrufst.
Denkbar ist auch eine freie Funktion:
bool vergleich ( const Auto& a1, const Auto& a2 ) { // was auch immer nötig ist für den Vergelich // gebe true oder false zurück }Natürlich ist das die Aufgabe des == Operators, wie ich sehe, dass es ebenfalls Werner vorschlägt.
-
@ werner
wenn ich denn bool operator== ... anwende, wie muss ich das dann im int main plazieren? bzw muss ich das dann überhaupt dort erwähnen?
ansonsten würde ich die methode vergleich so machen:void Auto:: vergleich(void) { cout << "Vergleich startet..." << endl; if (marke1 == marke2) {cout << "Marke ist identisch..." << endl; if (typ1 == typ2) {cout << "Typ ist identsich..." << endl; if (alter1 == alter2) {cout << "Alter ist identisch..." << endl; if (preis1 == preis2) {cout << "Preis ist identsich..." << endl; cout << "Diese 2 Modelle sind vollkommen identisch!" << endl;}}}} else cout << "Diese 2 Modelle sind nicht identisch!" << endl; };er gibt mir dann aber aus: "Diese 2 Modelle sind nicht identisch!" auch wenn ich die gleichen Werte eingebe!
danke für den hinweis und die antworten im voraus! :xmas1:
-
1. Du kannst den == operator als normale Funktion in deiner Klasse deklarieren, schau dir mal diesen Artikel an:
2. welche typen haben deine Variablen?
character-sequenzen kannst du nicht einfach mit dem == operator vergleichen, du musst strcmp benutzen. Sonst werden die Zeiger verglichen.
-
uhsuhz schrieb:
1. Du kannst den == operator als normale Funktion in deiner Klasse deklarieren, schau dir mal diesen Artikel an
Dort steht aber, dass
operator==eher als freie Funktion implementiert werden sollte.
Und gleich noch
operator!=anzubieten ist auch keine schlechte Idee.
-
Typisch C++ Forum, anstatt zu sagen was er falsch macht wird mit operatorüberladung rum geworfen, um alles noch komplizierter zu machen.

void Auto:: vergleich(void)Ist natürlich sinnlos, weil ein Auto das andere nicht kennt. Du musst das zweite übergeben
void Auto:: vergleich(const Auto& auto2){ ... ...marke = auto2.marke
-
*...marke == auto2.marke