Anfängerfrage: Konsolen"menü" Ein- und Ausgabe
-
Okay.
Dann speicher ich doch das jeweilige Auto mit allen Eigenschaften an einer Position des vectors.
Macht das nicht Probleme wenn ich dann je nach Menüpunkt nur bestimmte Eigenschaften ausgeben will?
-
Und ein anderes Problem.
Ich dachte mir, zum ausgeben greif ich auf ein bestimmtes Element zu mit Hilfe von vector.at(i).
also:
cout << cars.at(1)
Aber er sagt "Kein "<<" Operator stimmt mit diesen Operanden überein.
Was bedeutet das denn?
-
Das liegt daran, dass du nicht einfach so ein Auto-Objekt ausgeben kannst. Du musst es also ungefähr so schreiben
cars.at(1).leistungLesen();
-
Hm, das hat nicht funktioniert.
Muss ich evtl diesen << Operator überladen?Allerdings weiß ich nicht was das genau bedeutet. Wird damit der original operator sozusagen ersetzt?
also irgendwie std::ostream& operator << (std::ostream, cars) ?
-
So wie ich es geschrieben habe, sollte es funktionieren. Du brauchst ja nicht nochmal std::cout << zu schreiben, dass hast du doch schon in deinen leseLeistung usw. Methoden drin, wobei das natürlich nicht so die feinste Art ist, aber das ist momentan ja nicht so wichtig.
-
FreakY<3Cpp schrieb:
So wie ich es geschrieben habe, sollte es funktionieren. Du brauchst ja nicht nochmal std::cout << zu schreiben, dass hast du doch schon in deinen leseLeistung usw. Methoden drin, wobei das natürlich nicht so die feinste Art ist, aber das ist momentan ja nicht so wichtig.
Schande über mein Haupt.
Man muss natürlich dran denken, dass der vector bei 0 anfängt...Und warum ist das nicht die feinste Art? Ich finde das grade äußerst fein

Ich versuch da jetzt mal was mal sehen ob es klappt.
-
Weil man eine Klasse immer so gestalten sollte, dass sie äußerst flexibel und benutzerfreundlich ist. Benutzerfreundlich ist hiermit gemeint, dass andere Leute deine Klasse benutzen können, ohne etwas zu verändern und wenn sie einfach nur den Wert des Gewichts wollen, aber keine Ausgabe haben wollen, oder weil sie evtl. die WinAPI nutzen, oder was auch immer, stört dein cout.
D.h., aus deinen Methoden solltest du das hier machenvoid Auto::nameSetzen(string name) { this->name = name; } string Auto::nameLesen() { return this->name; } void Auto::leistungSetzen(int leistung) { this->leistung = leistung; } string Auto::leistungLesen() { return this->leistung; } void Auto::gewichtSetzen(int gewicht) { this->gewicht = gewicht; } int Auto::gewichtLesen() { return this->gewicht; } int Auto::kilowattLesen() { return this->leistung / 2; } int main() { //... //erster Wagen std::cout << cars.at(0).gewichtLesen(); }Die Namen werden am besten dann noch zu "getgewicht" und "setgewicht", wobei Deutsch und Englisch nicht gemischt werden sollten und du gleich alles Englisch schreibst.
-
Ok das seh ich ein.
Dann hab ich noch eine kleine Frage eher praktischer Natur.
Da es Visual Studio für mich umsonst gibt hab ohne viel überlegen eben das genommen.
Aber wo kann ich denn da den Pfad angeben in den er mir die erzeugte *.exe legen soll?
-
Die wird eigentlich immer in dem Ordner deines Projekts erstellt. Schau mal im Debug Ordner nach.
-
Ok, das wusste ich, ich dachte nur, dass es quasi so ein "speichern unter" Äquivalent gibt.
Dann hab ich aber tatsächlich noch eine Frage zum Kompiler.
Das unter Visual St. kompilierte Programm scheint eine bestimmte *.dll zu benötigen.
Scheinbar hat das was mitusing namespace std;
#include "stdafx.h"zu tun.
Gibts einen Weg das so zu kompilieren, dass es überall läuft, aber OHNE überall vor jedes cout, cin, endl std:: schreiben zu müssen? ^^