Einsteiger



  • Hi warum ist die Ausgabe von dem Code so verkehrt?

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    class hero {
    	
    	public:
    	
    	int static ID;
    	
        void zeigedaten() {
        	cout << "Name von Held mit ID " << ID << " = " << name << endl;
        	cout << "Leben von Held mit ID " << ID << " = " << leben << endl;
        	cout << "Mana von Held mit ID " << ID << " = "  << mana << endl;
        }
        
        hero() {ID++;
        cout << "Held mit der ID " << ID << " wurde erstellt" << endl;}
        hero(int a, int b, string c)	{ID++;
        cout << "Held mit der ID " << ID << " wurde über den Parameterkonstruktor erstellt" << endl;}
        hero(const hero&) {
        cout << "Kopierkonstruktor" << ID << endl;}
       ~hero() {
        cout << "Held mit der ID " << ID << " wurde vernichtet" << endl;
        	ID--;}
    		
    	private:
    	
    	int leben;
    	int mana;
    	string name;
    };
    
    int hero::ID = 0;
    int heldenanzahl;
    vector<hero>heldenliste;
    
    int main () {
    	
    	cout << "Wie viele Helden sollen erstellt werden?" << endl;
    	cin >> heldenanzahl;
    	for (int i = 0; i < heldenanzahl; i++) {
    		hero hallo;
    		heldenliste.push_back(hallo);
    		}	
    		system("pause");	
    }
    

    Eigentlich erwarte ich jeweils eine konstruktorzeile fürs erstellen und zerstören pro Instanz.



  • Eine "Konstruktorzeile" würde ich für das Zerstören nicht erwarten. Ansonsten magst du vielleicht mal beschreiben, was du beobachtest und was genau daran unerwartet ist.



  • Mal eine andere Frage... Was lernst du da, wo kommt das her? Ich find das schon recht absonderlich, hab die Befürchtung, das kann nur schlimmer werden.



  • Ich weiß nicht? Ist die Ausgabe davon

    #include <utility>  // std::exchange()
    #include <vector>
    #include <iostream>
    
    class hero
    {
    	static int ID;
    
    	int id;
    	int foo;
    
    public:
    	hero()
    	: id   { ++ID }
    	, foo  {}
    	{
    		std::cout << "Held mit der ID " << id << " wurde erstellt. (foo = " << foo << ")\n";
    	}
    	
    	explicit
    	hero(int foo)
    	: id   { ++ID }
    	, foo  { foo }
    	{
    		std::cout << "Held mit der ID " << id << " wurde durch den Parameterkonstruktor erstellt. (foo = " << foo << ")\n";
    	}
    
    	hero(hero const &other)
    	: id   { ++ID }
    	, foo  { other.foo }
    	{
    		std::cout << "Held mit der ID " << id << " wurde als Kopie von Held " << other.id << " erstellt. (foo = " << foo << ")\n";
    	}
    
    	hero(hero &&other) noexcept
    	: id   { ++ID }
    	, foo  { std::exchange(other.foo, -1) }
    	{
    		std::cout << "Held mit der ID " << id << " wurde durch Moven von Held " << other.id << " erstellt. (foo = " << foo << ")\n";
    	}
    
    	~hero()
    	{
    		std::cout << "Held mit der ID " << id << " wurde vernichtet. (foo = " << foo << ")\n";
    	}
    };
    
    int hero::ID = 0;
    
    int main()
    {
    	std::cout << "Wie viele Helden sollen erstellt werden?\n";
    	int heldenanzahl;
    	std::cin >> heldenanzahl;
    	
    	std::vector<hero> heldenliste;
    	heldenliste.reserve(heldenanzahl);
    
    	std::cout.put('\n');
    	for (int i{ 1 }; i <= heldenanzahl; ++i) {
    		heldenliste.emplace_back(hero{ i });
    		std::cout.put('\n');
    	}
    }
    

    vielleicht eher für Dich nachvollziehbar?



  • Hm aus Erinnerung längerer Zeit, vllt sollte ich doch nochmal ganz von vorne mich einlesen... Mal anders gefragt, was muss ich bei Google eingeben um die Mechaniken hinter dem Code zu lernen? Danke für den Code, sieht echt gut aus wird direkt studiert



  • @ycbm wenn ich bei google "der c++ programmierer" eingebe, erhalte ich als erstes die internetpräsenz dieses buches.

    allerdings weiß ich jetzt nicht, wie das mit einem neuen standard aussieht und ob das buch daher evtl. schon "veraltet" ist.



  • Ich muss das jetzt mal so direkt sagen, die Formatierung ist grauenvoll 😐



  • Das Buch habe ich tatsächlich. Ist c++14. Lohnt sich das rauskramen?



  • @ycbm sagte in Einsteiger:

    Das Buch habe ich tatsächlich. Ist c++14. Lohnt sich das rauskramen?

    Das rauskramen nicht.
    Aber das durcharbeiten schon.


Log in to reply