Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конструктор копировщик глючит в Borland С++
Форум программистов > Системное программирование > C, С++ и С Builder > Общие вопросы по С и С++
dexterov2000
Элементарная программа с самым простым классом CAT c двумя переменными типа int и int* и самая обычная функция temp копирования.
После процедуры копирования, переменная weight из конечного класса отображает какой-то мусор. Достаточно добавить лишний cout в конструкторе-копировщике и совсем другой результат.

CODE
//---------------------------------------------------------------------------

#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;};


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

Ну вот и сами разобрались.:)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.