[c++] chiarimenti sull'overriding dei costruttori
ciao ragazzi avrei bisogno di un aiuto:
potreste scrivermi un esempio di overriding di costruttori che è un argomento che non riesco ad inquadrare bene?????????
sul mio libro ad esempio c'è questo:
class vettore{
private:
int dimensione;
public:
vettore(int n);
};
class vettoreinteri:public vettore{
int *p;
public:
vettoreinteri(int n);
};
vettore::vettore(int n)
{
dimensione=n;
}
vettoreinteri::vettoreinteri(int n):vettore(n)
{
p=new int[n];
}
in questo caso mi viene detto che il costruttore vettore interi esegue l'overriding del costruttore vettore.
Non capisco:
perchè si parli di overriding se i costruttori hanno nomi diversi
cioè' al momento della creazione con la dicitura
vettoreinteri a;(per esempio)
non chiamo il costruttore vettoreinteri???????? è logico che no mi riferisco a "vettore" ; che bisogno ho di scrivere
"vettoreinteri::vettoreinteri(int n):vettore(n)" ????????????
mi sa che non ho minimamente colto il concetto, attendo delucidazioni...
grazie mille
potreste scrivermi un esempio di overriding di costruttori che è un argomento che non riesco ad inquadrare bene?????????
sul mio libro ad esempio c'è questo:
class vettore{
private:
int dimensione;
public:
vettore(int n);
};
class vettoreinteri:public vettore{
int *p;
public:
vettoreinteri(int n);
};
vettore::vettore(int n)
{
dimensione=n;
}
vettoreinteri::vettoreinteri(int n):vettore(n)
{
p=new int[n];
}
in questo caso mi viene detto che il costruttore vettore interi esegue l'overriding del costruttore vettore.
Non capisco:
perchè si parli di overriding se i costruttori hanno nomi diversi
cioè' al momento della creazione con la dicitura
vettoreinteri a;(per esempio)
non chiamo il costruttore vettoreinteri???????? è logico che no mi riferisco a "vettore" ; che bisogno ho di scrivere
"vettoreinteri::vettoreinteri(int n):vettore(n)" ????????????
mi sa che non ho minimamente colto il concetto, attendo delucidazioni...
grazie mille
Risposte
perche' potrebbe essere il costruttore di un'altra classe che si chiama sempre vettori... almeno se ho capito la tua domanda ...

mmmmmm
ma se io chiamo il costruttore "vettoreinteri" è logico che mi riferisco alla classe vettoreinteri e non ad altre classi
io mi chiedo come mai serve la dcitura"vettoreinteri::vettoreinteri(int n):vettore(n)"
che a parer mio è abbastanza inutile
ma se io chiamo il costruttore "vettoreinteri" è logico che mi riferisco alla classe vettoreinteri e non ad altre classi
io mi chiedo come mai serve la dcitura"vettoreinteri::vettoreinteri(int n):vettore(n)"
che a parer mio è abbastanza inutile
perche potresti fare un'altra classe che usa gli stessi costruttori...
tipo pippo::vettorinteri
k??
tipo pippo::vettorinteri
k??

"superpunk733":
perche potresti fare un'altra classe che usa gli stessi costruttori...
tipo pippo::vettorinteri
k??
intendi pippo:vettoreinteri giusto???????
quindi ,se ho capito bene, questo tipo di costruttore con quella dicitura mi dichiara che è praticamente riservato ESCLUSIVAMENTE a questa classe vero???????
ora,sempre inerente a questo argomento sto provando a capire coma mai con questo codice:
/*provaclass.h*/
class vettore
{
public:
float numero;
vettore(int n);
vettore();
};
class vettoreinteri:public vettore
{
int ciao;
};
/*programma*/
#include
#include
#include "provaclass.h"
vettore::vettore(int n)
{
numero=(20+n);
}
vettore::vettore()
{
numero=100;
}
main()
{
vettoreinteri vett;
cout<< "Il valore di numero vale: "<
return(0);
}
compliando ed eseguendo questo codice non mi viene segnalato nessun errore e il costruttore chiamato è giustamente vettore di default.
E fino qua tutto ok.
Ma se invece di
"vettoreinteri vett;" nel main metto "vettoreinteri vett(5)" mi da errore mentre io mi attendo che chiami il costruttore "vettore(int n)"
come mai???????
intendi pippo:vettoreinteri giusto???????
quindi ,se ho capito bene, questo tipo di costruttore con quella dicitura mi dichiara che è praticamente riservato ESCLUSIVAMENTE a questa classe vero???????
esattamente. la dicitura serve nel caso avessi un costruttore con lo stesso nome ma di una classe diversa.
per piacere racchiudi il tuo codice nei tag [code] senno ci capisco poco
per l'errore... ti segnala errore perche hai definito solo il costruttore predefinito
ma ho anche definito quello che accetta parametri interi....
il costruttore "vettore(int n)" siccome è ereditato non dovrebbe agire nel momento in cui io dichiaro "vettoreinteri vett(2)"????????(ad esempio)
come lo risolveresti tu il problema?
il costruttore "vettore(int n)" siccome è ereditato non dovrebbe agire nel momento in cui io dichiaro "vettoreinteri vett(2)"????????(ad esempio)
come lo risolveresti tu il problema?
mi si sta impallando il cervello....
ma un void che memorizza dati nel vettore nn c'e'?
e un void::print??

ma un void che memorizza dati nel vettore nn c'e'?
e un void::print??
Scusate se mi intrometto, credo che il motivo dell'errore stia nel fatto che i costruttori della classe base (vettore) possono essere richiamati solo sulla riga di inizializzazione del costruttore della classe derivata (vettoreinteri). Tu non hai definito costruttori per quest'ultima classe quindi, come ha detto anche superpunk733, viene richiamato automaticamente quello di default, cioè vettore::vettore().
a questo punto mi sa che mi servirebbe vedere come modifichereste voi l'esempio.....se no continuo a non capire
Definirei semplicemente tutti costruttori della classe vettoreinteri che mi interessa usare.
raga tutto a posto ho capito l'errore
piu' che altro no avevo ancora ben capito i meccanismi di ereditarietà
grazie a tutti^_^
piu' che altro no avevo ancora ben capito i meccanismi di ereditarietà
grazie a tutti^_^