Witam, otóż w Internecie znalazłem gotowy kod na wzorzec dekoracyjny, lecz chciałem go trochę przystosować do moich potrzeb, a mianowicie w gotowym kodzie to wygląda tak:
class Mercedes : public Samochod {
public: Mercedes():Samochod(){
samochod = "Mercedes";
wartosc=500000;
}
};
a konstruktor do tego wygląda tak:
Samochod(){
samochod = "Samochod podstawowy";
wartosc=0;
}
Lecz ja chciałem zrobić coś takiego:
class Mercedes : public Samochod {
public: Mercedes() :Samochod("Mercedes", 50000){}
};
i konstruktor:
Samochod(string samochod, int wartosc){
this->samochod = samochod;
this->wartosc = wartosc;
}
Lecz niestety podczas kompilacji pojawia mi się następujący błąd:
Error 1 error C2512: 'Dekorator' : no appropriate default constructor available c:\users... 53 1 ConsoleApplication11
Jak to poprawić?
Cały kod prezentuje się tak:
// ConsoleApplication11.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
/* Standardowy nieudekorowany samochod */
class Samochod {
protected:
string samochod;
double wartosc;
public:
Samochod(string samochod, int wartosc){
this->samochod = samochod;
this->wartosc = wartosc;
}
virtual string about(){
return samochod;
}
virtual double cena(){
return wartosc;
}
};
/* abstrakcyjny dekorator */
class Dekorator : public Samochod {
public:
virtual string about(){
return "hmm";
}
};
/* teraz mamy 2 przykladowe marki samochodow */
class Mercedes : public Samochod {
public: Mercedes() :Samochod("Mercedes", 50000){}
};
class Fiat : public Samochod {
public: Fiat() :Samochod("Fiat", 10000){}
};
/* czas na same dodatki */
class Klimatyzacja : public Dekorator {
Samochod *car;
public: Klimatyzacja(Samochod *samochod) :Dekorator(){
car = samochod;
}
string about(){
return car->about() + " + klimatyzacja";
}
double cena(){
return car->cena() + 1111;
}
};
class OponyZimowe : public Dekorator {
Samochod *car;
public: OponyZimowe(Samochod *samochod) :Dekorator(){
car = samochod;
}
string about()
{
return car->about() + " + opony zimowe";
}
/* niech ceny beda takie same */
double cena()
{
return car->cena() + 31234;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Samochod *s1 = new Mercedes();
Samochod *s2 = new Fiat();
cout << "\nBez wyposazenia" << endl;
cout << s1->about() << " " << s1->cena() << endl;
cout << s2->about() << " " << s2->cena() << endl;
return 0;
}