Inhalt von Methoden teilweise ersetzen?
-
neWk schrieb:
Also ich habe versucht das Prog von HumeSikkins zum Laufen zu bringen.
#include <iostream> #include <string> using namespace std; .................... Prog von HumeSikkins .................... int main() { BWM bmw; cout<<bmw.BMW(2004, true, true); return 0; };
Aber es kommt ne Fehlermeldung:
fatal error C1010: Unerwartetes Dateiende während der Suche nach der Direktive für die vorkompilierte HeaderdateiIch bin Anfänger!
BMW hat keinen Default-Konstruktor.
-
interpreter schrieb:
neWk schrieb:
Also ich habe versucht das Prog von HumeSikkins zum Laufen zu bringen.
#include <iostream> #include <string> using namespace std; .................... Prog von HumeSikkins .................... int main() { BWM bmw; cout<<bmw.BMW(2004, true, true); return 0; };
Aber es kommt ne Fehlermeldung:
fatal error C1010: Unerwartetes Dateiende während der Suche nach der Direktive für die vorkompilierte HeaderdateiIch bin Anfänger!
BMW hat keinen Default-Konstruktor.
Hmmm...wie konnte mir das entgehen :(. Ich glaub ich lasse nach
mfg
v R
-
interpreter schrieb:
BMW hat keinen Default-Konstruktor.
Was meinst du? Stimmt was nicht mit der main Funktion?
-
Schon klar:
int main() { BMW(2004, true, true); return 0; };
-
Den letzten Parameter des BMW-Konstruktors kannst du dir sparen: Ein BMW sieht immer gut aus.
-
Ich würd den Namen im Auto-Konstruktor gar nicht setzen und dann einfach in der BMW Klasse im Konstruktor folgendes machen
BMW() { name = "BMW"; Auto::Auto(); }
-
Und wie gebe ich das jetzt aus?
int main() { BMW(2004, true, true); cout<<""; //Wie gebe ich das denn jetzt aus? Da soll: 2004 true true stehen. WAIT; return 0; };
-
reden wir immernoch über den code von HumeSikkins?
dann funkt das nicht, weil auto keinen def kontruktor hat
ausserdem weist du zuerst einer member variable einen wert zu, die dann wieder durch den def kontruktur auf einen def. wert gesetzt wird.muss heisen:
BWM () : Auto() { Auto::Auto(); name = "BMW"; }
-
ostream& operator<<(ostream& o, const BMW& bmw) {
o << bmw.baujahr << " " << bmw.siehtgutaus;
// usw
return o;
}
-
neWk schrieb:
Und wie gebe ich das jetzt aus?
int main() { BMW(2004, true, true); cout<<""; //Wie gebe ich das denn jetzt aus? Da soll: 2004 true true stehen. WAIT; return 0; };
da musst du den << operator überladen, müsste ja im forum genug posts dazu geben ( suchen )
-
Hi!
@neWk:
1. Solltest du ein Objekt erstellen und nicht nur den Konstruktor aufrufen:BMW my_BMW(2004, true, true);
2. Wenn du das ausgeben willst ging das auch vorher nicht. Ein Konstruktor hat keinen Rückgabewert, aber du könntest ja den <<-Operator überladen:
friend ostream& operator<<(ostream& ostr, const BMW& bmw_ausg) { return ostr << bmw_ausg.baujahr << ' ' << bmw_ausg.fahrbereit << ' ' << bmw_ausg.siehtgutaus; }
EDIT: zu spät.
Code-Hacker
-
btw finde ich diese Vererbungshierarchie nicht gut und ist imo eine übertriebene Spezialisierung. Warum nicht einfach so:
class Auto { // ... Hersteller hersteller; Typ typ; };
-
Code-Hacker schrieb:
Hi!
@neWk:
1. Solltest du ein Objekt erstellen und nicht nur den Konstruktor aufrufen:BMW my_BMW(2004, true, true);
2. Wenn du das ausgeben willst ging das auch vorher nicht. Ein Konstruktor hat keinen Rückgabewert, aber du könntest ja den <<-Operator überladen:
friend ostream& operator<<(ostream& ostr, const BMW& bmw_ausg) { return ostr << bmw_ausg.baujahr << ' ' << bmw_ausg.fahrbereit << ' ' << bmw_ausg.siehtgutaus; }
EDIT: zu spät.
Code-Hacker
Das friend keyword ist an dieser Stelle falsch.
-
DEvent schrieb:
BWM () : Auto() { Auto::Auto(); name = "BMW"; }
Wie wäre es denn einfach mit
BMW() { name = "BMW"; }
?
Auto muss nicht in der Initialisierungsliste erwähnt werden, weil es default-konstruiert wird, und "Auto::Auto()" macht sowieso nicht, was du willst.
-
Hi!
@interpreter:
Stimmt. Ich dachte die Elemente wären private.
Aber ne Begründung deiner Aussagen wäre manchmal nicht schlecht...Code-Hacker
-
SirLant schrieb:
Ich würd den Namen im Auto-Konstruktor gar nicht setzen und dann einfach in der BMW Klasse im Konstruktor folgendes machen
BMW() { name = "BMW"; Auto::Auto(); }
Stimmt das ich nicht eher darauf gekommen bin
.
Eine Frage noch dazu:Wieso wird der name nicht wieder überschrieben wenn man vor dem Konstruktor den namen setzt?
#include <string> #include <iostream> using namespace std; class Auto { public: Auto(); void LeseDaten(); int baujahr; int x,y,z; bool fahrbereit; bool siehtgutaus; string name; }; Auto::Auto() { baujahr = 2004; x = 0; y = 0; z = 0; fahrbereit = true; siehtgutaus = true; name = "default"; }; void Auto::LeseDaten() { cout<<"Baujahr : "<<baujahr<<endl; cout<<"X : "<<x<<endl; cout<<"Y : "<<y<<endl; cout<<"Z : "<<z<<endl; cout<<"Fahrbereit : "<<fahrbereit<<endl; cout<<"Sieht gut aus : "<<siehtgutaus<<endl; cout<<"Name : "<<name<<endl; }; class BMW : public Auto { public: BMW(){ name = "325i"; Auto::Auto(); }; }; int main() { BMW bmw; bmw.LeseDaten(); system("pause"); return(0); }
Ansonsten sollte das nur ein Beispiel sein, was besseres ist mir nicht eingefallen, hab da eben alles public gelassen man möge mir verzeihen
-
operator void schrieb:
DEvent schrieb:
BWM () : Auto() { Auto::Auto(); name = "BMW"; }
Wie wäre es denn einfach mit
BMW() { name = "BMW"; }
?
Auto muss nicht in der Initialisierungsliste erwähnt werden, weil es default-konstruiert wird, und "Auto::Auto()" macht sowieso nicht, was du willst.
Bis eben dachte ich, ich hätte es kapiert
Warum geht das denn so nicht?
-
Code-Hacker schrieb:
Hi!
@interpreter:
Stimmt. Ich dachte die Elemente wären private.Auch wenn sie privat gewesen wären, wäre friend hier falsch
friend darf nur in Klassen benutzt werden.Aber ne Begründung deiner Aussagen wäre manchmal nicht schlecht...
Ja. Sorry, bin heute etwas schlecht gelaunt
-
-
Ok, so ganz genau verstehe ich den Code noch nicht, aber das Problem besteht immer noch: Wie gebe ich das aus??
#include <iostream> #include <string> using namespace std; #define WAIT for(;;); class Auto { public: Auto(int baujahr, bool fahrbereit, bool siehtGutAus, string name) : baujahr(baujahr) , fahrbereit(fahrbereit) , siehtGutAus(siehtGutAus) , name(name) {} public: int baujahr; bool fahrbereit; bool siehtGutAus; string name; }; class BMW : public Auto { public: BMW(int baujahr, bool fahrbereit, bool siehtGutAus) : Auto(baujahr, fahrbereit, siehtGutAus, "BMW") {} friend ostream& operator<<(ostream& os,BMW& m); }; ostream& operator<<(ostream& o, const BMW& bmw) { return o << bmw.baujahr << " " << bmw.fahrbereit<<" "<<bmw.siehtGutAus; }; int main() { BMW my_BMW(2004, true, true); //wie gebe ich das jetzt aus??? WAIT; return 0; };
Was ist falsch daran?