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

  • Автор темы dexterov2000
  • Дата начала
D

dexterov2000

#1
Элементарная программа с самым простым классом 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]

Разобрался сам
 
D

destr

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

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