Hej, program kompiluje się, jednak w momencie użycia operatora przypisania program przestaje działać jak należy (nie pokazuje dalszych coutów). Ktoś może wie dlaczego :)?
Plik nagłówkowy
#ifndef COW_H_INCLUDED
#define COW_H_INCLUDED
class Cow
{
private:
char cowName[20];
char * cowHobby;
double cowWeight;
public:
Cow();
Cow(const char * name, const char * hobby, double weight);
Cow(const Cow &c);
~Cow();
Cow & operator=(const Cow &c);
void showCow() const;
};
#endif // COW_H_INCLUDED
Funckje
#include <iostream>
#include "cow.h"
#include <cstring>
using namespace std;
Cow::Cow()
{
cowName[0] = '\0';
cowHobby = nullptr;
cowWeight = 0;
cout << "Krowa wyimaginowana powstala" << endl;
}
Cow::Cow(const char * name, const char * hobby, double weight)
{
strncpy(cowName, name, 20);
int chSize = strlen(hobby);
cowHobby = new char[chSize + 1];
strncpy(cowHobby, hobby, 20);
if (weight > 0)
cowWeight = weight;
else
cowWeight = 0;
cout << "Krowa z konstruktora powstala" << endl;
}
Cow::Cow(const Cow &c)
{
strcpy(cowName, c.cowName);
if (c.cowHobby == nullptr)
cowHobby = nullptr;
else
strcpy(cowHobby, c.cowHobby);
cowWeight = c.cowWeight;
cout << "Uzyto konstruktora kopiujacego" << endl;
}
Cow::~Cow()
{
cout << "Zabilem byka, coz to byl za byk! Krew z niego sika - siku sik sik. Imie jego to: " << cowName;
delete [] cowHobby;
}
Cow & Cow::operator=(const Cow &c)
{
if (this == &c)
return *this;
delete [] cowHobby;
int chSize = strlen(c.cowHobby);
cowHobby = new char[chSize + 1];
strcpy(cowName, c.cowName);
strcpy(cowHobby, c.cowHobby);
cowWeight = c.cowWeight;
cout << "Uzyto operatora przypisania" << endl;
return *this;
}
void Cow::showCow() const
{
cout << endl;
cout << "cowName: " << cowName << endl;
cout << "cowHobby: " << cowHobby << endl;
cout << "cowWeight: " << cowWeight << endl << endl;
}
Main
#include <iostream>
#include "cow.h"
using namespace std;
int main()
{
Cow K1;
cout << "K1" << endl;
Cow K2("K2", "Jesc", 99);
cout << "K2" << endl;
Cow K3 = K2;
cout << "K3" << endl;
Cow K4 = Cow(K2);
cout << "K4" << endl;
Cow K5(K2);
cout << "K5" << endl;
Cow * ptr = new Cow;
*ptr = K2;
cout << "ptr" << endl;
K1.showCow();
K2.showCow();
K3.showCow();
K4.showCow();
K5.showCow();
ptr->showCow();
return 0;
}