konstruktor i operator przypisania

zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

konstruktor i operator przypisania

Post autor: zxc18 »

Witam, mam taki dziwny problem z takim o to programem:

Kod: Zaznacz cały

#include<iostream>
#include<string>
using namespace std;

class Animal{
	  private:
	  		  string itsName;
	  		  int itsAge;
	  		  int *pAge;
	  public:
	  		  Animal(string name = 0 ,int age = 0,int page = 0)
             :itsName(name),itsAge(age), pAge(new int(page)){
							cout<<"Name : ";
				            cin>>name;
				            cout<<"itsAge : ";
				            cin>>age;
				            cout<<"pAge : ";
				            cin>>page;
				            cout<<"-------

";
             }
	  		 ~Animal();
	  		  Animal(const Animal& rhs){
 				     pAge = new int;
		             *pAge = *(rhs.pAge); // ok 
 					 itsName = rhs.itsName;
 					 itsAge = rhs.itsAge;
 					 cerr<<"Konstruktor kopiujacy 
";
             }
	  		 Animal &operator=(const Animal&);
	  		/* friend ostream& operator<<(ostream&, Animal&); */
	  		 void fnPrint();
	  		
};

Animal::~Animal()
{
 				 if(pAge){
 				 delete pAge;
 				 pAge = 0; }
 				 cerr<<"Destruktor 
";
}

Animal& Animal::operator =(const Animal & rhs)
{
 	   if(&rhs !=this)
 	   {
	   		   pAge =  new int;
	   		   pAge = rhs.pAge;
	   		   itsName = rhs.itsName;
	   		   itsAge = rhs.itsAge;
       }
       return *this;
}

void Animal::fnPrint() 
{
 	 cout<<"itsName : "<<itsName<<endl;
 	 cout<<"itsAge : "<<itsAge<<endl;
 	 cout<<"pAge : "<<*pAge<<endl;
 	 cout<<"---fnPrint()---"<<endl;
}

int main()
{
 	Animal dog;
 	Animal cat;
 	cout<<"----------------------"<<endl;
 	dog.fnPrint();
 	cat.fnPrint();
 	cout<<"----------------------"<<endl;
 	dog = cat;
 	dog.fnPrint();
 	system("pause");
 	return 0;
}
i nie wiem czemu sie nie kompiluje:/ zastanawiam sie co robie zle, bo wydaje mi sie wszystko jest podrecznikowo :/ prosze o pomoc. Dziekuje i pozdrawiam

EDIT : juz wiem jaki blad, dziwna deklaracja konstruktora, usuniecie listy incjalizacyjnej i wpisanie w ciele konstr. incjalizacji string name i int age, pomoglo
hmmm dziwnie mysalem ze tak mozna pisac ...
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

konstruktor i operator przypisania

Post autor: Rafal88K »

Problem jest w konstruktorze, powinno być: string name = ""
zxc18 pisze:o wydaje mi sie wszystko jest podrecznikowo
Korzystasz z listy inicjalizacyjnej, nie znając nawet jeszcze wartości jakie będą miały parametry, bo dopiero w konstruktorze je pobierasz. Tak zawsze będziesz przypisywał domyślne wartości.
Ostatnio zmieniony 15 kwie 2008, o 21:18 przez Rafal88K, łącznie zmieniany 2 razy.
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

konstruktor i operator przypisania

Post autor: zxc18 »

jeszcze takie pytanie, jak mam przeciazony operator
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

konstruktor i operator przypisania

Post autor: Rafal88K »

W operatorze przypisania zmień:

Kod: Zaznacz cały

                  pAge =  new int;
                  pAge = rhs.pAge; 
na:

Kod: Zaznacz cały

*pAge = *(rhs.pAge);
Żeby wyświetlić:

Kod: Zaznacz cały

os<< *theAnimal.pAge<<endl;
Jeszcze mógłbyś destruktor zrobić wirtualny.
ODPOWIEDZ