Copy-Constructor und Destructor



  • /* Wer kann folgendes Verhalten erklären 🙂

    Für die Klasse Bruch habe ich den operator * überladen.
    Die Methode returniert ein Objekt per Value. Also wird
    der Copy-C'tor aufgerufen.
    Warum wird der Copy-C'tor bei Variante 1 nicht aufgerufen,
    wenn ein D'tor existiert ? 🤡
    */

    // k.fragen@web.de -----

    #include <iostream>

    using namespace std;

    // Deklaration der Klasse Bruch
    class Bruch
    {
    private:
    int zaehler;
    int nenner;
    [cpp]
    public:
    Bruch(int=0,int=1);
    Bruch(const Bruch &);
    ~Bruch();
    Bruch operator *( Bruch & );
    void ausgeben(void);
    };

    Bruch::Bruch(int z, int n)
    :zaehler(z),nenner(n)
    {}

    Bruch::Bruch(const Bruch &b)
    : zaehler(b.zaehler), nenner(b.nenner)
    {
    cout << "Copy-C'tor" << endl;
    }

    Bruch::~Bruch(void) {}

    Bruch Bruch::operator *( Bruch &b )
    {
    // Variante 1
    // return Bruch( zaehler * b.zaehler, nenner * b.nenner );

    // Variante 2
    Bruch tmp(zaehler * b.zaehler, nenner * b.nenner);
    return tmp;
    }

    void Bruch::ausgeben( void )
    {
    cout << (double)zaehler / nenner << endl;
    }

    int main(void)
    {
    Bruch b1;
    Bruch b2(1,2);
    Bruch b3(3,4);

    b1 = b2 * b3;
    b1.ausgeben();
    return 0;
    }

    /* Ausgabe bei Variante 1 mit D'tor
    0.375
    */

    /* Ausgabe bei Variante 1 ohne D'tor
    Copy-C'tor
    0.375
    */

    /* Ausgabe bei Variante 2 mit D'tor
    Copy-C'tor
    0.375
    */

    /* Ausgabe bei Variante 2 ohne D'tor
    Copy-C'tor
    0.375
    */



  • Bitte cpp-Tags benutzen.



  • b1 = b2 * b3;

    Du weist hier zu, hier wird nichts kopiert. Überlad mal den = - Operator.



  • cpp-tags sind echt toll ^^

    Bruch Bruch::operator * (const Bruch &b)
     {
      return Bruch (zaehler * b.zaehler,nenner * b.nenner);
     }
    
    Bruch::~Bruch(void) {}
    

    Warum haste den D-tor überhaupt deklariert, wenn er eh leer ist? Oo

    Bruch b1; 
    Bruch b2(1,2); 
    Bruch b3(3,4); 
    
    b1 = b2 * b3; //den operator hast du nicht wirklich überladen, oder? ^^
    b1.ausgeben(); //warum nicht den Operator << überladen?
    return 0;
    

    bb

    //edit hmm.. zu langsam : <




Anmelden zum Antworten