bitte um hilfe bei problem mit konstruktoren



  • aufgabe ist es anzugeben welche konstruktoren/operatoren im folgenden programm (main) der reihe nach durchlaufen werden und wo es jeweils geschieht.
    der programmtext lautet wie folgt:

    class Zahl
    {
    public:
    Zahl(int wert) : wert(wert) {} //K1
    Zahl(double wert) :wert(wert) {} //K2
    Zahl& operator=(double wert) //OP
    {this->wert=wert; return(*this);}

    private:
    double wert;
    };

    void main(void)
    {
    Zahl z1(8.), z2=3; //bei diesem aufruf bin ich mit hilfe des debuggers zum entschluss gekommen das zuerst K2 und danach K1 aufgerufen werden, die operatoren machen aber noch probleme
    z1=z2=8;
    Zahl z3=z1=Zahl(2);
    }

    über jegliche art von hilfe wäre ich sehr dankbar da mir die zeit davonläuft

    mfg und danke im vorraus schonmal



  • Juhten Tach,

    Also erstmal würde ich dir Code-TAGS empfehlen, dann lassen sich deine Fragen einfacher und komfortabler beantworten...

    Dann ist deine main-Funktion nicht standard-konform: int main() wäre C++ Standard 😉

    Dann würde ich in den Konstruktor bzw. Operaden Code einfach eine Stream Ausgabe einfügen, dann weißt du, was wann aufgerufen wird, etwa so:

    #include <iostream>
    
    using namespace std;
    
    class Zahl
    {
    	public:
    		Zahl(int wert) : wert(wert) // K1
    		{
    			cout << "Jetzt im Konstruktor 1!" << endl;
    		}
    		Zahl(double wert) : wert(wert) // K2
    		{
    			cout << "Jetzt im Konstruktor 2!" << endl;
    		}
    		Zahl& operator=(double wert) // OP=
    		{
    			cout << "Verwendung des = Operators!" << endl;
    			this->wert = wert;
    			return (*this);
    		}
    
    	private:
    		double wert;
    };
    
    int main(void)
    {
    	cout << "Demo f" << static_cast<unsigned char>(129)
    	     << "r Konstruktor und Operanden Aufrufe\n\n";
    	Zahl z1(8.0),
    		 z2 = 3;
    
    	z1 = z2 = 8;
    	Zahl z3 = z1 = Zahl(2);
    
    	return (0);
    }
    

    Oder war etwas anderes gemeint ? 🤡



  • danke erstmal an codefinder, hast mir sehr geholfen

    eine frage die ich noch hätte wäre ob nicht schon standardkonstruktoren/operatoren vorhanden sind außer den jetz von mir selbst definierten?

    bin neuling auf dem gebiet also schonmal entschuldigung für die nervige fragerei 🙄



  • Moosi-M schrieb:

    eine frage die ich noch hätte wäre ob nicht schon standardkonstruktoren/operatoren vorhanden sind außer den jetz von mir selbst definierten?

    Standardkonstruktoren: Ja, allerdings nicht mehr, wenn du selbst einen definierst
    Operatoren: Nur der Zuweisungsoperator, allerdings muss man hier vorsichtig, bei dynamischen Elementen sein



  • danke, dann wäre das geklärt x)

    operatoren sind überladbar, richtig

    nur ist es dann auch möglich angenommen ich hätte eine matrixklasse cMat
    kann ich dort den indexoperator [] so überladen das ein zugriff durch z.B.
    Matix[2, 3] möglich wird?

    viel gefrage aber ich bin neugierig und will mich ja weiterentwickeln



  • Moosi-M schrieb:

    danke, dann wäre das geklärt x)

    Kein Problem 😉

    Moosi-M schrieb:

    operatoren sind überladbar, richtig

    jop

    Moosi-M schrieb:

    nur ist es dann auch möglich angenommen ich hätte eine matrixklasse cMat
    kann ich dort den indexoperator [] so überladen das ein zugriff durch z.B.
    Matix[2, 3] möglich wird?

    nop 😃 , wenn dann Matrix[2] [3] ...du überlädst dann einerseits den Operator [] für die Klasse Matrix und andererseits für Klasse Line oder wie auch immer du sie nennst, die ein Datenelement (Member) von Maxtrix also cMat bildet 💡

    Moosi-M schrieb:

    viel gefrage aber ich bin neugierig und will mich ja weiterentwickeln

    gut so 😉 👍


Anmelden zum Antworten