c++ - overload operator=, different class as argument -


i have problem below code, compiles, yet output crashes desktop without giving me suggestion i'm doing wrong.

i know problem within operator= overloading @ 'ciezarowy::operator = (const samochod &sam)' , executed @ 'ciezar[0] = samochody[0];'

sorry long main() i'm doing learning purpose want see result actions.

here's code, compiled codeblocks/mingw.

#include <iostream> #include <cstdlib> #include <ctime>  using namespace std;   class samochod{  public:  string marka; int pojemnosc; double przebieg; samochod(); samochod operator = (const samochod &sam); samochod(const samochod &sam); };  samochod::samochod() {  string marki[5] = {"opel","audi","toyota","fiat","mazda"}; int index = rand() % 5; marka = marki[index]; pojemnosc = rand() % 2000 + 1200; przebieg = 40000; }   samochod samochod::operator = (const samochod &sam) {  marka = sam.marka; pojemnosc = 3000; przebieg = sam.przebieg; }    samochod::samochod(const samochod &sam) {  marka = sam.marka; pojemnosc = 3000; przebieg = sam.przebieg; }    class osobowy:public samochod { public: osobowy(); int lpas; double pojb; int ldrzwi; };  osobowy::osobowy() : lpas( 5 ) , pojb( rand() % 100 + 80 ) , ldrzwi ( 5 ) {  }  class ciezarowy:public samochod { public: ciezarowy(); int losi; double ladownosc; bool samow; ciezarowy operator = (const samochod &sam);  };  ciezarowy::ciezarowy() : losi ( rand() % 2 + 2 ) , ladownosc ( 1000 ) , samow ( 1 ) {  }   ciezarowy ciezarowy::operator = (const samochod &sam) {     marka = sam.marka;     przebieg = sam.przebieg; }   int main() { srand( time( null ) ); samochod samochody[4];  samochod samoch[3];  ( int = 0;i<3;i++){    samoch[i] = samochody[i];}  cout<<samochody[0].marka<<endl; cout<<samochody[0].pojemnosc<<endl; cout<<samochody[0].przebieg<<endl; cout<<samochody[1].marka<<endl; cout<<samochody[1].pojemnosc<<endl; cout<<samochody[1].przebieg<<endl; cout<<samochody[2].marka<<endl; cout<<samochody[2].pojemnosc<<endl; cout<<samochody[2].przebieg<<endl; cout<<samochody[3].marka<<endl; cout<<samochody[3].pojemnosc<<endl; cout<<samochody[3].przebieg<<endl; cout<<samoch[0].marka<<endl; cout<<samoch[0].pojemnosc<<endl; cout<<samoch[0].przebieg<<endl; cout<<samoch[1].marka<<endl; cout<<samoch[1].pojemnosc<<endl; cout<<samoch[1].przebieg<<endl; cout<<samoch[2].marka<<endl; cout<<samoch[2].pojemnosc<<endl; cout<<samoch[2].przebieg<<endl;  osobowy osob[3];  osob[1].ldrzwi = 3; osob[1].lpas = 4; cout<<osob[0].marka<<endl; cout<<osob[0].pojemnosc<<endl; cout<<osob[0].przebieg<<endl; cout<<osob[0].ldrzwi<<endl; cout<<osob[0].lpas<<endl; cout<<osob[0].pojb<<endl; cout<<osob[1].marka<<endl; cout<<osob[1].pojemnosc<<endl; cout<<osob[1].przebieg<<endl; cout<<osob[1].ldrzwi<<endl; cout<<osob[1].lpas<<endl; cout<<osob[1].pojb<<endl; cout<<osob[2].marka<<endl; cout<<osob[2].pojemnosc<<endl; cout<<osob[2].przebieg<<endl; cout<<osob[2].ldrzwi<<endl; cout<<osob[2].lpas<<endl; cout<<osob[2].pojb<<endl;  ciezarowy ciezar[2];  ciezar[0] = samochody[0];     ciezar[1].ladownosc = 500;    ciezar[1].samow = 0;  cout<<ciezar[0].marka<<endl; cout<<ciezar[0].pojemnosc<<endl; cout<<ciezar[0].przebieg<<endl; cout<<ciezar[0].losi<<endl; cout<<ciezar[0].ladownosc<<endl; cout<<ciezar[0].samow<<endl; cout<<ciezar[1].marka<<endl; cout<<ciezar[1].pojemnosc<<endl; cout<<ciezar[1].przebieg<<endl; cout<<ciezar[1].losi<<endl; cout<<ciezar[1].ladownosc<<endl; cout<<ciezar[1].samow<<endl;  return 0; } 

your operator= should return reference object. right doesn't return anything. undefined behavior flow out of non void function without returning anything.

samochod& samochod::operator = (const samochod &sam)         ^^ {     if(this == &sam)         return *this;      marka = sam.marka;     pojemnosc = 3000;     przebieg = sam.przebieg;     return *this;     ^^^^^^^^^^^^ } 

Comments

Popular posts from this blog

Change php variable from jquery value using ajax (same page) -

Pull out data related to my apps from Android Play Store and iOS App Store -

How can I fetch data from a web server in an android application? -