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