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
Post a Comment