Konstruktoren



  • Hallo,

    Ich würde gerne ein Programm schreiben, welches einen Konstruktor, Destruktor, Kopierkonstruktor und den Zuweisungsoperator enthält. Weiters soll über die Methode anzahlInstanzen() die aktuelle Anzahl an Instanzen ausgegeben werden.

    Das ist mein Ansatz:

    #include <iostream>
    #include "Klasse.h"
    using namespace std;
    
    Klasse::Klasse(){
    
    	klassenwert = 1;
    	anzahl++;
    }
    
    Klasse::~Klasse(){
    
    	anzahl--;
    	if(anzahl < 0) anzahl = 0;
    
    }
    
    unsigned int Klasse::anzahlInstanzen(){
    
    	return anzahl;
    
    }
    
    Klasse Klasse::operator+(const Klasse& b){
    
    	this->klassenwert = this->klassenwert + b.klassenwert;
    
    }
    
    Klasse Klasse::operator+(int wert){
    
    	this->klassenwert = this->klassenwert + wert;
    

    Klasse:

    class Klasse{
    
    	int static anzahl;
    	int klassenwert;
    
    	public:
    
    	Klasse();
    	~Klasse();
    
    	unsigned int anzahlInstanzen();
    	Klasse operator+(const Klasse&);
    	Klasse operator+(int wert);
    
    };
    

    Ich verstehe nicht ganz, wie ich die Variable anzahl am Besten initialisieren soll, beziehungsweise wo ich sie auf 0 setzen kann. Ebenfalls erscheint eine Fehlermeldung "Nicht definierter Verweis" aufgrund der Variable.

    Darüber hinaus würde ich noch gerne wissen, wie genau der Kopierkonstruktor definiert wird. Also wie wird dieser aufgerufen, und soll dieser einfach den Inhalt eines Klassenobjekts in ein neu erstelltes Klassenobjekt kopieren?

    Würde mich wie immer sehr freuen, wenn mir jemand weiterhilft.
    Vielen Dank

    LG hackhack1234



  • hackhack1234 schrieb:

    Ich würde gerne ein Programm schreiben,

    Übersetzt: Meine Hausaufgabe ist es, ein Programm zu schreiben,

    hackhack1234 schrieb:

    Ich verstehe nicht ganz, wie ich die Variable anzahl am Besten initialisieren soll, beziehungsweise wo ich sie auf 0 setzen kann. Ebenfalls erscheint eine Fehlermeldung "Nicht definierter Verweis" aufgrund der Variable.

    int Klasse::anzahl = 0;
    
    Klasse::Klasse(){
    
    	klassenwert = 1;
    	anzahl++;
    }
    

    hackhack1234 schrieb:

    Darüber hinaus würde ich noch gerne wissen, wie genau der Kopierkonstruktor definiert wird.

    Du kennst google?

    hackhack1234 schrieb:

    Also wie wird dieser aufgerufen,

    Aufrufen ist nicht definieren.

    hackhack1234 schrieb:

    und soll dieser einfach den Inhalt eines Klassenobjekts in ein neu erstelltes Klassenobjekt kopieren?

    Diese Interpretation bietet sich bei Kopierkonstruktor doch an, oder?



  • Ok, danke für die sarkastischen Antworten 😃

    Hast du vielleicht noch einen Tipp für die Variable anzahl?



  • steht doch da, wenn auch etwas kryptisch.

    statische variablen musst du außerhalb der klasse initialisieren. in diesem fall mit int Klasse::anzahl=0;

    danach kannst sie im konstruktor inkrementieren und im destruktor dekrementieren.

    edit:
    Der Kopierkonstruktor wird normaler Weise so erstellt

    Klasse(Klasse andereklasse)
    {
    klassenelement=andereklasse.klassenelement;
    }
    

    Aufrufen kannst du ihn mit

    Klasse klasse(andereklasse);
    

    Dieses this->klasse kannst du auch weg lassen, indem du einfach den Parametern des Konstruktors andere (verkürzte) Namen gibst, also z.B.

    Klasse(int p)
    {
    paramaeter=p;
    }
    


  • hackhack1234 schrieb:

    Klasse::~Klasse(){
    	anzahl--;
    	if(anzahl < 0) anzahl = 0;
    }
    

    Der war gut. 🤡



  • Ok danke, dass hat mir sehr weiter geholfen, werde es gleich umsetzen, vielen Dank! 🙂



  • volkard schrieb:

    hackhack1234 schrieb:

    Klasse::~Klasse(){
    	anzahl--;
    	if(anzahl < 0) anzahl = 0;
    }
    

    Der war gut. 🤡

    Lel. Was ist, wenn Sonnenwinde deine Bits umherflippen? Musst du alles einberechnen.

    Ansonsten empfiehlt es sich, im Kopieroperator/Konstruktor das Argument als const Referenz zu definieren, sonst würde das Objekt, welches du einem anderen zuweisen möchtest, in das Argument kopiert und das endlos.



  • Hoppla, das war wohl ein Denkfehler 😃


Anmelden zum Antworten