Конструктор копировщик глючит в Borland С++

Тема в разделе "Общие вопросы по С и С++", создана пользователем dexterov2000, 31 май 2008.

  1. dexterov2000

    dexterov2000 Гость

    Элементарная программа с самым простым классом CAT c двумя переменными типа int и int* и самая обычная функция temp копирования.
    После процедуры копирования, переменная weight из конечного класса отображает какой-то мусор. Достаточно добавить лишний cout в конструкторе-копировщике и совсем другой результат.

    [codebox] //---------------------------------------------------------------------------

    #include<iostream.h>
    #include <vcl.h>
    #pragma hdrstop


    class Cat{
    public:
    Cat();
    Cat(const Cat&);
    ~Cat();
    void SetAge(){ cout<<"Scoliko let ";cin>>age;}
    int GetAge()const {return age;}
    void SetWeight(){ cout<<"Kakoi ves v kilogramah ";cin>>*weight;}
    int* GetWeight()const {return weight;}

    void Meau() const { cout<<"My age is: "<<age<<endl;
    cout<<"My weight is: "<<*weight<<endl;}

    void Set(){SetAge();SetWeight();}

    protected:
    int age;
    int* weight;

    };


    Cat::Cat():
    age(0)
    {cout<<"Constructor of Cat() is called..."<<endl;
    weight= new int(2);}

    Cat::Cat(const Cat& rhs)
    { cout<<"Constructor of Cat(Cat&) is called..."<<endl;
    age=rhs.GetAge(); weight= new int; weight=rhs.GetWeight();//cout<<weight;
    }



    Cat::~Cat()
    {delete weight;cout<<"Destructor of Cat is called..."<<endl; }

    Cat Temp(Cat);

    //---------------------------------------------------------------------------

    #pragma argsused
    int main(int argc, char* argv[])
    { int y; Cat masea; Cat bagira;
    masea.Set();
    bagira=Temp(masea);
    bagira.Meau();

    cin>>y;
    return 0;
    }

    Cat Temp(Cat masea){return masea;};[/codebox]

    Разобрался сам
     
  2. destr

    destr Гость

    Так у Вас копирующий конструктор и не вызывается. А мусор выводится, потому что при создании объекта указателю ничего не присваивается, и куда он указывает - неизвестно.

    Ну вот и сами разобрались.:)
     
Загрузка...

Поделиться этой страницей