Klassen - Frage
-
Hi leute

ich bin voller neuling in sachen c++, programmiere aber schon ca. 4 Jahre in C.
Nun hab ich die Kunst der Klassen entdeckt und bischen rumprobiert...Meine Frage:

Kann ich Klassen dynamisch erstellen lassen ?
z.B. Der User wird gefragt, wie sein auto heißt und darauf soll eine Klasse(auto) mit diesem Namen generiert werden...hoffe ihr versteht meine Frage

Grüße und Dank
zenfu

-
Andere Frage .. wozu soll das gut sein...?
Bastel doch ne Klasse Auto und nimm ein Attribut Name, Bauart oder whatever...
-
jo danke erstmal...
nur die frage ist, wie ich auf wunsch des users ein neues objekt aus der klasse erzeugen kann...
denn wenn ich 3x den autonamen innerhalb dieser klasse ändere, hab ich ja dann keine 3 autos...

-
Du instanzierst einfach ein neues Objekt der Klasse und speicherst alle in nem Vector oder array...oder liste..wie auch immer...
und gibts ihm den namen mit nem seter oder direkt per konstruktor...
ist eh recht einfach
-
hihi danke, wenn ich nur wüsste wie ^^
-
class Auto { private: std::string m_marke; int m_tueren; public: Auto(const std::string& marke); void setMarke(const std::string& marke); const std::string& getMarke() const; void setTueren(int anzahl); int getTueren() const; }; ... std::string eingabe; ... // irgendwo her bekommst du ja die eingabe // std::cin oder ein graphisches Eingabefeld CEdit oder sonst was if(eingabe1 == "auto") { neuesAuto = Auto("BMW"); if(eingabe2 == "kleinwagen") { neuesAuto.setTueren(2); // mögliches weiteres vorgehen: // in einen std::vector<Auto> mit push_back hinzufügen } } ...implementierung musst du aber selber vornehmen

-
class Car { public: Car(const std::string& brand, const unsigned short doors) : m_brand(brand), m_doors(doors) {} public: void set_brand(const std::string& brand) { m_brand = brand; } std::string get_brand() const { return m_brand; } void set_door_count(const unsigned short count) { m_doors = count; } unsigned short get_door_count() const { return m_doors; } private: std::string m_brand; unsigned short m_doors; };...
#include <iostream> #include <string> #include "Car.h" int main() { std::vector<Car> cars; for (std::size_t i = 0; i < 10; ++i) { std::cout << "Automarke: " << std::flush; std::string brand_name; std::getline(std::cin, brand_name); Car new_item(brand_name, 2); std::cout << "Türen: " << new_item.get_door_count() << std::endl; cars.push_back(new_item); } }...
-
Hi !
Du kannst Objekte dynamisch mit dem new-Operator erzeugen.Weil heute so ein schöner, sonniger Tag war:
#include <iostream> #include <string> using namespace std; class Auto { private: string name; public: void benennen( string name ) { this->name = name; } void name_zeigen() { cout << this->name << endl; } }; int main() { Auto* p_auto; p_auto = new Auto[3]; p_auto->benennen("Hugo"); (p_auto + 1)->benennen("Berta"); (p_auto + 2)->benennen("Emma"); for ( int i = 0; i<3; i++ ) (p_auto + i)->name_zeigen(); // Jedes Auto zeigt seinen Namen. delete [] p_auto; return 0; }
-
(D)Evil schrieb:
void set_brand(const std::string& brand) { m_brand = brand; } void set_door_count(const unsigned short count) { m_doors = count; }gut, dass autofirmen übernommen werden seh ich eventuell noch ein; aber für set_door_count fällt mir nur ein aufruf in "destroy_car" ein

-
queer_boy schrieb:
(D)Evil schrieb:
void set_brand(const std::string& brand) { m_brand = brand; } void set_door_count(const unsigned short count) { m_doors = count; }gut, dass autofirmen übernommen werden seh ich eventuell noch ein; aber für set_door_count fällt mir nur ein aufruf in "destroy_car" ein

Wieso, wäre doch super cool wenn man die Tür-Anzahl eines Autos dynamisch einstellen könnte?
if ( freundlich.is_zu_bloed_zum_einparken() ) { meinAuto.set_door_count(4); } if ( brauche_viel_platz_im_kofferraum() ) { meinAuto.set_door_count(2); }btw,
const unsigned short countDas const macht ja so viel Sinn, vor allem weil Parameter eh kopiert werden.
-
danke danke

jetzt hab ichs gerafft
#include <iostream> #include <string> using namespace std; class Auto { private: string name; public: void benennen( string name ) { this->name = name; } void name_zeigen() { cout << this->name << endl; } }; int main() { Auto* p_auto; char eingabe; int j=1; int i=1; char autoname[20]; p_auto = new Auto[20]; do { system("CLS"); cout << "Wollen Sie ein\n\n[n]eues Auto eintragen "; cout << "[a]lle Autos anzeigen lassen oder\n\n[b]eenden ?" <<endl; cin >> eingabe; switch(eingabe) { case 'n': cout << "Wie soll das " << i << ". Auto heissen ?"<<endl; memset (autoname,'\0',20); cout << autoname; cin >> autoname; (p_auto + i)->benennen(autoname); i++; system("pause"); break; case 'a': j=1; do { cout << j <<": "; (p_auto + j)->name_zeigen(); j++; }while(j<i); system("pause"); break; case 'b': exit(0); break; } fflush(stdin); }while(eingabe!='b'); system("pause"); delete [] p_auto; return 0; }nun noch eine frage:
p_auto = new Auto[20];erzeugt ja quasi 20 plätze für autos... wie kann ich das ganze dynamisch machen,
sodass ich den speicherplatz nicht vorher reservieren muss,
sondern erst nach bestätigung des users ?
mitp_auto = new Auto[i];geht es ja nicht...
oder hab ich da was falsch verstanden ?vielen dank erstmal
grüße
zen
-
zenfu schrieb:
...
mitp_auto = new Auto[i];geht es ja nicht...
...Doch.
Genau dafür gibt's new....

(OK, auch, um "scopes zu überwinden")
Gruß,
Simon2.
-
Klar geht
p_auto = new Auto[i];, du mußt nur vorher die gewünschte Anzahl einlesen
Wenn du willst, daß sich die Anzahl später verändern kann, empfehle ich einen STL-Container (vector<> oder deque<> bieten sich hier an).