Witam. Mam dwa pytania co do napisanego przeze mnie kodu:
-
Linia 223 i 227 - powinienem użyć tam polimorfizmu, czy jest to poprawnie napisane?
-
"Zademonstruj działanie tego operatora tworząc dwa obiekty lokalne z
wykorzystaniem ich konstruktorów domyślnych, a następnie za pomocą operatora += dodając do każdego z nich wszystkie obiekty jego typu znajdujące się w liście." - jak to zrobić?
Proszę nie zwracać uwagi na etykietę goto, została ona zrobiona na szybko - wiem, że nie powinno się jej stosować. Nazwy zmiennych też do poprawy, ale to już na końcu.
KOD:
#include
#include
#include
using namespace std;
int a,b,c,d,f;
string e,g;
class silnik
{
protected:
int moc;
int wymiary;
public:
silnik *nast;
static int x;
public:
silnik() : moc(1), wymiary(1), nast(NULL) { x++; };
silnik(int a, int b) : moc(a), wymiary(b), nast(NULL) { x++; };
silnik(const silnik &dane) : moc(dane.moc), wymiary(dane.wymiary), nast(NULL) { x++; };
~silnik(){
x--;
delete nast;
};
virtual void wypisz() {
cout<<"Moc silnika: "<
cout<<"Wymiary silnika: "<
}
void wypiszListe() {
wypisz();
if(nast!=NULL) {
cout<
nast->wypiszListe();
}
}
void wypisz_stat() {
cout << "x: " << x << endl;
}
};
class elektryczny : public silnik
{
protected:
int napiecie;
int czas_pracy;
public:
elektryczny() : silnik(a,b), napiecie(1), czas_pracy(1) {};
elektryczny(int a, int b, int c, int d) : silnik(a,b), napiecie(c), czas_pracy(d) {};
elektryczny(const elektryczny &dane) : silnik(dane), napiecie(dane.napiecie), czas_pracy(dane.czas_pracy) {};
virtual ~elektryczny() {};
void modyfikuj() {
cout<<"Moc silnika: ";
cin>>a;
cout<<"Wymiary silnika: ";
cin>>b;
cout<<"Napiecie: ";
cin>>c;
cout<<"Czas pracy: ";
cin>>d;
}
void wypisz() {
cout<<"Moc silnika: "<
cout<<"Wymiary silnika: "<
cout<<"Napiecie: "<
cout<<"Czas pracy: "<
}
elektryczny& operator+= (int argument) { // wymagany przeciazony operator
moc += argument;
wymiary += argument;
napiecie += argument;
return elektryczny(a,b,c,d);
}
};
class spalinowy : public silnik
{
protected:
string rodzaj_paliwa;
int pojemnosc;
string rodzaj_oleju;
public:
spalinowy() : silnik(a,b), rodzaj_paliwa("asd"), pojemnosc(1), rodzaj_oleju("fgh") {};
spalinowy(int a, int b, string e, int f, string g) : silnik(a,b), rodzaj_paliwa(e), pojemnosc(f), rodzaj_oleju(g) {};
spalinowy(const spalinowy &dane) : silnik(dane), rodzaj_paliwa(dane.rodzaj_paliwa), pojemnosc(dane.pojemnosc),
rodzaj_oleju(dane.rodzaj_oleju) {};
virtual ~spalinowy() {};
void modyfikuj() {
cout<<"Moc silnika: ";
cin>>a;
cout<<"Wymiary silnika: ";
cin>>b;
cout<<"Rodzaj paliwa: ";
cin>>e;
cout<<"Pojemnosc: ";
cin>>f;
cout<<"Rodzaj oleju: ";
cin>>g;
cout<
}
void wypisz() {
cout<<"Moc silnika: "<
cout<<"Wymiary silnika: "<
cout<<"Rodzaj paliwa: "<
cout<<"Pojemnosc: "<
cout<<"Rodzaj oleju: "<
}
spalinowy& operator+= (int argument) { // wymagany przeciazony operator
moc += argument;
wymiary += argument;
pojemnosc += argument;
return spalinowy(a,b,e,f,g);
}
};
int i;
int silnik::x=0;
silnik *glowa, *wsk;
elektryczny *wsk_pomoc;
spalinowy *wsk_pomoc2;
int main()
{
int wybor;
char wybor2;
powrot:
cout<<"Witaj w bazie samochodow!"<
cout<<"Co chcesz teraz zrobic?"<
cout<<"1.Wpisac dane silnika elektrycznego"<
cout<<"2.Wpisac dane silnika spalinowego"<
cout<<"3.Wypisac wprowadzone dane i zakonczyc program"<
cout<<"Wybor: ";
cin>>wybor;
if(wybor==1)
{
system("CLS");
for(i=0; i<50; i++)
{
system("CLS");
wsk_pomoc->modyfikuj();
if(glowa==NULL)
glowa = new elektryczny(a,b,c,d);
else
{
wsk=glowa;
while(wsk->nast!=NULL){
wsk=wsk->nast;
}
wsk->nast=new elektryczny(a,b,c,d);
}
cout<
cin>>wybor2;
if(wybor2=='n')
{
system("CLS");
goto powrot;
}
}
}
if(wybor==2)
{
system("CLS");
for(i=0; i<50; i++)
{
system("CLS");
wsk_pomoc2->modyfikuj();
if(glowa==NULL)
glowa = new spalinowy(a,b,e,f,g);
else
{
wsk=glowa;
while(wsk->nast!=NULL)
wsk=wsk->nast;
wsk->nast=new spalinowy(a,b,e,f,g);
}
cout<<"Czy chcesz kontynuuowac wprowadzanie danych? [t/n]"<
cin>>wybor2;
if(wybor2=='n')
{
system("CLS");
goto powrot;
}
}
}
if(wybor==3)
{
elektryczny obiekt2;
spalinowy obiekt3;
elektryczny *mc = new elektryczny;
spalinowy *mc2 = new spalinowy;
system ("CLS");
glowa->wypiszListe();
cout<
cout<<"STATIC:"<
cout<<"X: "<
cout<<"------------------------------"<
cout<<"ELEKTRYCZNY:"<
obiekt2.wypiszListe(); // polimorfizm????
cout<
cout<<"SPALINOWY:"<
obiekt3.wypiszListe(); // polimorfizm????
cout<
cout<<"PRZECIAZANIE OPERATOROW - 10 + obiekt2:"<
obiekt2 += 10;
obiekt2.wypiszListe();
cout<
cout<<"PRZECIAZANIE OPERATOROW - 10 + obiekt3:"<
obiekt3 += 10;
obiekt3.wypiszListe();
cout<
// ---ELEKTRYCZNY----------------
// Wypisuje typ usuwanego obiektu oraz wartosc pola statycznego
cout<<"------------------------------"<
if (typeid(*mc) == typeid(elektryczny))
cout<<"ELEKTRYCZNY:"<
cout<
cout<<"STATIC:"<
cout<<"X: "<
delete mc;
// ---SPALINOWY------------------
// Wypisuje typ usuwanego obiektu oraz wartosc pola statycznego
cout<
if (typeid(*mc2) == typeid(spalinowy))
cout<<"SPALINOWY:"<
cout<
cout<<"STATIC:"<
cout<<"X: "<
delete mc2;
cout<<"------------------------------"<
delete glowa;
exit(0);
}
return 0;
}
– Dodane 07.05.2012 (Pn) 20:54 – jeżeli chodzi o polimorfizm to chyba teraz jest poprawnie:
#include
#include
#include
using namespace std;
int a,b,c,d,f;
string e,g;
class silnik
{
protected:
int moc;
int wymiary;
public:
silnik *nast;
static int x;
public:
silnik() : moc(1), wymiary(1), nast(NULL) { x++; };
silnik(int a, int b) : moc(a), wymiary(b), nast(NULL) { x++; };
silnik(const silnik &dane) : moc(dane.moc), wymiary(dane.wymiary), nast(NULL) { x++; };
~silnik(){
x--;
delete nast;
};
virtual void wypisz() {
cout<<"Moc silnika: "<
cout<<"Wymiary silnika: "<
}
void wypiszListe() {
wypisz();
if(nast!=NULL) {
cout<
nast->wypiszListe();
}
}
void wypisz_stat() {
cout << "x: " << x << endl;
}
};
class elektryczny : public silnik
{
protected:
int napiecie;
int czas_pracy;
public:
elektryczny() : silnik(a,b), napiecie(1), czas_pracy(1) {};
elektryczny(int a, int b, int c, int d) : silnik(a,b), napiecie(c), czas_pracy(d) {};
elektryczny(const elektryczny &dane) : silnik(dane), napiecie(dane.napiecie), czas_pracy(dane.czas_pracy) {};
virtual ~elektryczny() {};
void modyfikuj() {
cout<<"Moc silnika: ";
cin>>a;
cout<<"Wymiary silnika: ";
cin>>b;
cout<<"Napiecie: ";
cin>>c;
cout<<"Czas pracy: ";
cin>>d;
}
void wypisz() {
cout<<"Moc silnika: "<
cout<<"Wymiary silnika: "<
cout<<"Napiecie: "<
cout<<"Czas pracy: "<
}
elektryczny& operator+= (int argument) { // wymagany przeciazony operator
moc += argument;
wymiary += argument;
napiecie += argument;
return elektryczny(a,b,c,d);
}
};
class spalinowy : public silnik
{
protected:
string rodzaj_paliwa;
int pojemnosc;
string rodzaj_oleju;
public:
spalinowy() : silnik(a,b), rodzaj_paliwa("asd"), pojemnosc(1), rodzaj_oleju("fgh") {};
spalinowy(int a, int b, string e, int f, string g) : silnik(a,b), rodzaj_paliwa(e), pojemnosc(f), rodzaj_oleju(g) {};
spalinowy(const spalinowy &dane) : silnik(dane), rodzaj_paliwa(dane.rodzaj_paliwa), pojemnosc(dane.pojemnosc),
rodzaj_oleju(dane.rodzaj_oleju) {};
virtual ~spalinowy() {};
void modyfikuj() {
cout<<"Moc silnika: ";
cin>>a;
cout<<"Wymiary silnika: ";
cin>>b;
cout<<"Rodzaj paliwa: ";
cin>>e;
cout<<"Pojemnosc: ";
cin>>f;
cout<<"Rodzaj oleju: ";
cin>>g;
cout<
}
void wypisz() {
cout<<"Moc silnika: "<
cout<<"Wymiary silnika: "<
cout<<"Rodzaj paliwa: "<
cout<<"Pojemnosc: "<
cout<<"Rodzaj oleju: "<
}
spalinowy& operator+= (int argument) { // wymagany przeciazony operator
moc += argument;
wymiary += argument;
pojemnosc += argument;
return spalinowy(a,b,e,f,g);
}
};
int i;
int silnik::x=0;
silnik *glowa, *wsk;
elektryczny *wsk_pomoc;
spalinowy *wsk_pomoc2;
int main()
{
int wybor;
char wybor2;
powrot:
cout<<"Witaj w bazie samochodow!"<
cout<<"Co chcesz teraz zrobic?"<
cout<<"1.Wpisac dane silnika elektrycznego"<
cout<<"2.Wpisac dane silnika spalinowego"<
cout<<"3.Wypisac wprowadzone dane i zakonczyc program"<
cout<<"Wybor: ";
cin>>wybor;
if(wybor==1)
{
system("CLS");
for(i=0; i<50; i++)
{
system("CLS");
wsk_pomoc->modyfikuj();
if(glowa==NULL)
glowa = new elektryczny(a,b,c,d);
else
{
wsk=glowa;
while(wsk->nast!=NULL){
wsk=wsk->nast;
}
wsk->nast=new elektryczny(a,b,c,d);
}
cout<
cin>>wybor2;
if(wybor2=='n')
{
system("CLS");
goto powrot;
}
}
}
if(wybor==2)
{
system("CLS");
for(i=0; i<50; i++)
{
system("CLS");
wsk_pomoc2->modyfikuj();
if(glowa==NULL)
glowa = new spalinowy(a,b,e,f,g);
else
{
wsk=glowa;
while(wsk->nast!=NULL)
wsk=wsk->nast;
wsk->nast=new spalinowy(a,b,e,f,g);
}
cout<<"Czy chcesz kontynuuowac wprowadzanie danych? [t/n]"<
cin>>wybor2;
if(wybor2=='n')
{
system("CLS");
goto powrot;
}
}
}
if(wybor==3)
{
elektryczny obiekt2;
spalinowy obiekt3;
elektryczny *mc = new elektryczny;
spalinowy *mc2 = new spalinowy;
system ("CLS");
glowa->wypiszListe();
cout<
cout<<"STATIC:"<
cout<<"------------------------------"<
cout<<"ELEKTRYCZNY:"<
obiekt2.elektryczny::wypiszListe(); // polimorfizm????
cout<
cout<<"SPALINOWY:"<
obiekt3.spalinowy::wypiszListe(); // polimorfizm????
cout<
cout<<"PRZECIAZANIE OPERATOROW - 10 + obiekt2:"<
obiekt2 += 10;
obiekt2.elektryczny::wypiszListe();
cout<
cout<<"PRZECIAZANIE OPERATOROW - 10 + obiekt3:"<
obiekt3 += 10;
obiekt3.spalinowy::wypiszListe();
cout<
// ---ELEKTRYCZNY----------------
// Wypisuje typ usuwanego obiektu oraz wartosc pola statycznego
cout<<"------------------------------"<
cout<
cout<<"STATIC:"<
delete mc;
// ---SPALINOWY------------------
// Wypisuje typ usuwanego obiektu oraz wartosc pola statycznego
cout<
cout<<"STATIC:"<
delete mc2;
cout<<"------------------------------"<
delete glowa;
exit(0);
}
return 0;
}