OVH Cloud OVH Cloud

héritage

11 réponses
Avatar
olivier
Bonjour,

Le code suivant marche pas toujours, pouvez-vous me donner la bonne
façon de le coder:

#include <iostream>
#include <cctype>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;


class toto
{
public:
toto();
int b;
void tata();
};

toto::toto()
{
b = 4;
}

void toto::tata()
{
}


class titi: toto
{
public:
void go();
};


void titi::go()
{
cout << "ok" << b << endl;
}


int main(int argc, char *argv[])
{
toto* toto1 = new toto();
titi *titi1 = (titi*) toto1;
titi1->go();
return 0;
}




PS: Je n'ai pas envie de rajouter une fonction virtuelle go() à toto
(en fait, je ne le peux pas, toto étant une librairie à laquelle je n'ai
pas accès).


Merci!
Olivier.

1 réponse

1 2
Avatar
Alexandre
Faudrait savoir, tu disais qu'il ne marchait pas toujours.
Là, tu essayes d'utiliser un objet Base comme si c'était un autre objet.
Le comportement d'un tel truc est sans doute indéfini. Ca "marche"
parfois et d'autre fois non, selon le sens du vent, du compilateur et du
système.



En fait ca marche toujours dans le code que j'ai posté. Ca plante toujours
dans un autre code plus complexe (et encore, je ne suis pas sûr que le
plantage vienne de là).


le code que tu as posté est tout simplement faux. Si ça marche (ie ne plante
pas), c'est que tu es chanceux !
En effet, tu essaie d'appeler une fonction go() dans une classe qui n'en
possède pas !!!!





1 2