OVH Cloud OVH Cloud

Comment appeler un constructeur ???

6 réponses
Avatar
Albert Delay
Salut,

Désolé, j'ai pose le 24 cette question dans le mauvais forum.
(L'abus d'alcool...)

J'essaye de faire un bout de code C++ pour envoyer des publicités
sur plusieurs forums en meme temps,
(en fait je suis en train de developper une bibliotheque C++ nntp
qui me permettra d'envoyer ces publicités regulierement),
mais je n'ai pas ecrit de C++ depuis longtemps...

Voici le probleme qui se pose à moi
(un peu resumé, quelques autres classes interviennent par ci par la),
modifié pour tenir sur qulques lignes.

J'ai une classe de base, NNTPBase,

class NNTPBase {
public:
int _i;
int _j;
NNTPBase(int i,int j);
// etc...
};

NNTPBase::NNTPBase(int i, int j)
{
_i = i;
_j = j;
}

// etc...

Je derive NNTPDerived de NNTPBase,
mais le constructeur de NNTPDerived
recoit une string et non deux int,
et avant d'obtenir deux entiers la chaine recue
doit etre decomposée et analysée...

Le probleme est donc que je ne peux pas construire NNTPBase
dans le constructor initialization list
comme ainsi

NNTPDerived::NNTPDerived(string bla) : NNTPBase(i,j) { /* ... */}

Je tente donc de faire :
NNTPDerived::NNTPDerived(string bla)
{

// calcule i et j

NNTPBase(i,j);

// ensuite initialise autres membres de NNTPDerived...

}


mais cela ne marche pas ! QUE DOIS-JE FAIRE ?

Merci d'avance de votre aide.

Cordialement,

ALbert Delay.



--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/

6 réponses

Avatar
Florent C.
Albert Delay wrote:

Salut,

Désolé, j'ai pose le 24 cette question dans le mauvais forum.
(L'abus d'alcool...)

J'essaye de faire un bout de code C++ pour envoyer des publicités
sur plusieurs forums en meme temps,

C'est encore le mauvais forum (eh oui !).

Essaye plutôt fr.comp.lang.spam mais je ne suis pas sûr qu'il existe,
peut-être devras-tu le créer. Or dans ce cas, tu ne pourras obtenir
d'aide que par toi-même, puisque tu y seras le seul posteur. Donc tu as
la solution, donc tu n'as pas besoin d'aide, donc tu n'as pas besoin de
ce forum, donc ton problème est résolu.

Et maintenant, sois poli, dis merci :)

Florent.

Avatar
Horst Kraemer
On 30 Dec 2003 11:19:39 GMT, Albert Delay
wrote:

J'ai une classe de base, NNTPBase,

class NNTPBase {
public:
int _i;
int _j;
NNTPBase(int i,int j);
// etc...
};

NNTPBase::NNTPBase(int i, int j)
{
_i = i;
_j = j;
}

// etc...


plus élégant

class NNTPBase {
public:
int _i;
int _j;
NNTPBase(int i,int j) : _i(i) , _j(j) {}
// etc...
};

Je derive NNTPDerived de NNTPBase,
mais le constructeur de NNTPDerived
recoit une string et non deux int,
et avant d'obtenir deux entiers la chaine recue
doit etre decomposée et analysée...

Le probleme est donc que je ne peux pas construire NNTPBase
dans le constructor initialization list
comme ainsi

NNTPDerived::NNTPDerived(string bla) : NNTPBase(i,j) { /* ... */}

Je tente donc de faire :
NNTPDerived::NNTPDerived(string bla)
{
// calcule i et j

NNTPBase(i,j);

// ensuite initialise autres membres de NNTPDerived...


Impossible. On ne peut jamais "appeler" un constructeur d'une base.
Selon la définition du langage C++ un constructeur de NNTPBase sera
appelé automatiquement avant que le constructeur NNTPDerived(string)
entre dans son bloc {/*...*/).

L'instruction

NNTPBase(i,j);

construit un *nouveau* objet temporaire du type NNTPBase et le
jette...

Une solution est de définir un constructeur

NNTPBase() {}

qui ne fait "rien" (qui sera appelé automatiquement quand la liste
d'initialisation de NNTPDerived ne contient rien) et de faire les
affectations

_i = <valeur calculée>;
_j = <valeur calculée>;

pour la base dans le bloc de NNTPDerived(string).

Une autre solution est de définir deux fonctions geti(string) et
getj(string) qui calculent les valeurs nécessaires:

class NNTPDerived: public NNTPBase {
int geti(string bla);
int getj(string bla);
public:
NNTPDerived(string bla) : NNTPBase(geti(bla),getj(bla)) {/*.. */}
};

Bien entendu les fonctions ne peuvent utiliser aucun membre non
statique de NNTPDerived parce que ni NNTPBase ni NNTPDerived
n'existent avant l'exécution du constructeur de NNTPBase.

--
Horst

Avatar
gpg
Bin didon il est tetu le monsieur.

Ou il est en train de mettre au point une nouvelle variété de troll...
Avatar
Laurent DELEPINE
Albert Delay wrote:

Désolé, j'ai pose le 24 cette question dans le mauvais forum.
(L'abus d'alcool...)


Et tu y a deja obtenu une réponse qui reste valide ici : on ne veux pas
de pub sur les forums.


A+

LD

Avatar
drkm
--=-=- Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: quoted-printable

Albert Delay writes:

J'essaye de faire un bout de code C++ pour envoyer des publicités
sur plusieurs forums en meme temps, (en fait je suis en train de
developper une bibliotheque C++ nntp qui me permettra d'envoyer ces
publicités regulierement),


--=-=- Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit


Tiens, on dirait un de ces petits comiques, qui s'affublent d'une
fausse barbe et d'un faux turbant, une fausse bombe sous le bras, et
qui foncent le 25 décembre en gueulant vers les MPs chargés de la
sécurité dans les aéroports américains.

Vous savez, ces gens qui aiment à se faire tirer dessus.

--drkm

--=-=-=--

Avatar
Alain Naigeon
"Albert Delay" a écrit dans le message news:


J'essaye de faire un bout de code C++ pour envoyer des publicités
sur plusieurs forums en meme temps,


Quelle horreur !

(en fait je suis en train de developper une bibliotheque C++ nntp
qui me permettra d'envoyer ces publicités regulierement),
mais je n'ai pas ecrit de C++ depuis longtemps...


Ouf...

Merci d'avance de votre aide.


Surtout pas, les copains !!


--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France