C++ Volání konstruktoru rodiče
Napsal: pát 22. kvě 2009, 10:26
Zdravím. Dělám úkol na PJC (programování v C++). Měli jsme za úkol navrhnout třídu Menu a k ní třídy Polozka a Submenu : Polozka (Submenu je potomkem polozky, má jen navíc ukazatel na první prvek spojového seznamu polozek). Hází mi to chybu , když volám různě konstruktory rodičů při spuštění konstruktoru potomka. Musí být u rodiče deklarován defaultní konstruktor bez parametrů? (V tomto případě je nesmyslný, protože při vytvoření položky usím znát název a id). Při kompilace g++ -Wall -Wno-long-long -pedantic mi to hází chyby:
Zde je potřebný úryvek kódu:
Předem díky za tipy 
Zde je potřebný úryvek kódu:
Kód: Vybrat vše
class Polozka
{
private:
int id;
string name;
Polozka * dalsi;
protected:
bool sm;
public:
Polozka(int _id, string _name);
Polozka(int _id, string _name,bool _sm);
Polozka * getDalsi(void);
void setDalsi(Polozka * p);
virtual ~Polozka(void);
int getID(void) const;
string getName(void) const;
virtual Polozka * existuje(int id);
virtual string& vypis(string& out) const;
};
class Submenu : public Polozka
{
private:
Polozka * submenu;
public:
string& vypis(string& out) const;
Polozka * existuje(int id);
Submenu(int _id, string _name);
~Submenu(void);
void vloz(Polozka * p);
bool isSubm(void);
};
class Menu
{
friend ostream& operator << (ostream&,const Menu&); //položky v submenu odsadit o 3 mezery
private:
Polozka * polozky;
Polozka * existuje(int id) const;
Polozka * getPolozka_Submenu(int id) const;
Polozka * getPred(int id) const;
public:
Menu(void);
~Menu(void);
bool vlozZa(int id, Polozka * p);
bool vlozDo(int id, Polozka * p);//vložení do submenu ID
bool odeber(int id);//při odebrání submenu odebrat i jeho položky
bool najdi(int id, string& cesta) const;
};
//Polozka
Polozka::Polozka(int _id, string _name)
{
id=_id;
name=_name;
sm=false;
dalsi=NULL;
}
Polozka::Polozka(int _id, string _name,bool _sm)
{
id=_id;
name=_name;
sm=_sm;
dalsi=NULL;
}
Polozka::~Polozka()
{
if(dalsi!=NULL) delete dalsi;
}
//konec polozky
//Submenu
Submenu::Submenu(int _id, string _name)
{
Polozka::Polozka(_id,_name,true);
}
Submenu::~Submenu()
{
if(submenu!=NULL) delete submenu;
~Polozka(); //smaze pamet polozky
}