D
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]
Разобрался сам
После процедуры копирования, переменная 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]
Разобрался сам