Witam, jak w temacie, mam problem z przeciążonym operatorem =. Nie do końca wiem na czym on polega ponieważ Składowe name jak i hobby są przypisywane do obiektu natomiast składowa weight zostaje wyzerowana mimo że miała inną wartość w obiekcie który był przypisywany.
#pragma once
#ifndef COW_H_
#define COW_H_
class Cow
{
char name[20];
char * hobby;
double weight;
public:
Cow();
Cow(const char * nm, const char * ho, double wt);
Cow(const Cow &c);
~Cow();
Cow & operator=(const Cow & c);
void showCow() const;
};
#endif // !COW_H_
//implementacja metod klasy Cow
#include "stdafx.h"
#include "Header.h"
#include <iostream>
#pragma warning(disable : 4996)
using std::cout;
using std::endl;
Cow::Cow()
{
name[0] = '\0';
hobby = new char [1];
hobby[0] = '\0';
weight = 0;
}
Cow::Cow(const char * nm, const char * ho, double wt)
{
strcpy(name, nm);
hobby = new char[strlen(ho) + 1];
strcpy(hobby, ho);
weight = wt;
}
Cow::Cow(const Cow & c)
{
strcpy(name, c.name);
hobby = new char[strlen(c.hobby) + 1];
strcpy(hobby, c.hobby);
}
Cow::~Cow()
{
delete[] hobby;
}
Cow & Cow::operator=(const Cow & c)
{
if (this == &c)
return *this;
delete[]hobby;
hobby = new char[strlen(c.hobby) + 1];
strcpy(hobby, c.hobby);
strcpy(name, c.name);
weight = c.weight;
return *this;
}
void Cow::showCow() const
{
cout << "Imie: " << name << endl;
cout << "Hobby: " << hobby << endl;
cout << "Waga: " << weight << endl;
}
//wlasciwy program testujacy interfejs klasy
#include "stdafx.h"
#include "Header.h"
#include <iostream>
using namespace std;
int main()
{
Cow x;
Cow w("andrzej", "pilka", 85);
Cow z = w;
cout << "x:" << endl;
x.showCow();
cout << "z:" << endl;
z.showCow();
cout << "w:" << endl;
w.showCow();
w = x;
cout << "w(x):" << endl;
w.showCow();
system("pause");
return 0;
}