PDA

View Full Version : [C++] costruttore classe derivata


wizard_at
18-09-2008, 13:13
ciao a tutti.
Mi scuso anticipatamense se il mio linguaggio non e' consono alla programmazione.

Il mio problema consiste (detto in parolaccie) nel fatto che non so come e se posso creare una classe derivata riscrivendo il costruttore che originariamente riceveva un parametro.

detto in codice:


class mamma
{
public:
mamma (int a);
int b;
}

//scrivo cosi' perche' nel mio programma si trovano in 2 file separato ( *.h *.cpp

mamma::mamma(int a)
{
b=a;
}

class figlio : public mamma
{
figlio //e qui non so cosa fare...
}


voglio che il figlio rifaccia cio' che faceva mamma e ne aggiunga un pezzo.

ciao , grazie a tutti

71104
18-09-2008, 13:25
l'unica parolaccia che leggo in quel post è "parolaccie".
comunque:

#include <iostream>
using namespace std;

class mamma
{
public:
mamma(int lal)
{
cout << lal << endl;
}
};

class figlio : public mamma
{
public:
figlio(int lal, int lol) :
mamma(lal)
{
cout << lol << endl;
}
};

int main()
{
figlio(1, 2);
return 0;
}

wizard_at
18-09-2008, 13:29
l'unica parolaccia che leggo in quel post è "parolaccie".


grazie

in forma esplicita e'?

figlio::figlio(int a, int b):mamma(int a)
{
;
}

wizard_at
18-09-2008, 13:47
e se non volessi aggiungere un argomento a figlio???

cionci
18-09-2008, 18:07
e se non volessi aggiungere un argomento a figlio???
Dipende da quale significato specifico ha l'intero che passi a mamma.

wizard_at
18-09-2008, 18:22
Dipende da quale significato specifico ha l'intero che passi a mamma.

in realta' non non sto passando un intero ma un puntatore IrrlichtDevice.

cionci
18-09-2008, 18:27
in realta' non non sto passando un intero ma un puntatore IrrlichtDevice.
Da qualche parte questo puntatore lo dovrai passare al figlio per inizializzare mamma.

wizard_at
18-09-2008, 18:36
esatto


lavoro con file *.h(qui le classi) e file *.cpp (qui le funzioni)
il mio codice' e' pressapoco questo:

file fasi.h

class fasi
{
public:
fasi(IrrlichtDevice* de);...
}

file fasi.cpp

fasi::fasi(IrrlichtDevice* de){
//codice
}

file menu.h

class menu : public fasi
{
public:
menu(IrrlichtDevice* de);
}

file menu.cpp

menu::menu(IrrlichtDevice* de){
//codice
}


e' corretto? non credo perche' mi da errore.

cionci
18-09-2008, 18:43
class menu : public fasi
{
public:
menu(IrrlichtDevice* de):fasi(de);
}

Esattamente come nell'esempio della classe figlio.

wizard_at
18-09-2008, 18:55
EDIT: passo aventi per chiarire meglio

funziona se scrivo cosi':


class meno : public fasi
{
public:
meno(IrrlichtDevice* dev):fasi(dev){
device = dev;

rcv= new menureceiver(device);
device->setEventReceiver(rcv);


driver = device->getVideoDriver();
smgr = device->getSceneManager();
guienv = device->getGUIEnvironment();



images = driver->getTexture("media/menu.png");

guienv->addButton(rect<s32>(290,150,360,190), 0, 101, L"Gioca");
guienv->addButton(rect<s32>(290,210,360,250), 0, 102, L"Info");
guienv->addButton(rect<s32>(290,270,360,310), 0, 103, L"Esci");

}
....


come faccio a separare i due pezzi?

wizard_at
18-09-2008, 19:16
RISOLTO!!!


class figlio : public mamma
{
public:
figlio(anni* x);

...

}

figlio::figlio(anni* x):mamma(anni){
//codice
}