Problème avec les classes filles

gdefrance Messages postés 7 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 1 juin 2005 - 24 juil. 2004 à 11:16
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 24 juil. 2004 à 17:53
Bonjour à tous, j'ai un problème avec une classe fille en C++, la classe mère chaine détient ses constructeurs et tout marche bien, mais avec la classe fille chaine_t dès que je veux l'initialiser avec un mot, il m'appelle d'abord le constructeur mère void et puis ensuite il m'appelle le constructeur mère (char *) mais la rien ne se passe.

Si quelqu'un pourrait élucider mon problème
Merci à tous.

#include
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

//------------------------------------------------------------------------------
// Déclaration de la classe Mère chaine
//------------------------------------------------------------------------------

class chaine
{
// int longueur;
char *adr;
protected : int longueur;
public : chaine(); // Constructeur par défaut
chaine(char *); // Constructeur
chaine(chaine &); // Constructeur par recopie
~chaine(); // Destructeur
void operator=(chaine &);
int operator==(chaine);
chaine & operator+(chaine);
char & operator[](int);
void affiche();
};

//------------------------------------------------------------------------------
// Déclaration de la classe Fille Chaine
//------------------------------------------------------------------------------

class chaine_T:public chaine
{
int Type;
float Val;
public : chaine_T();
chaine_T(char *);
void affiche();
};

//------------------------------------------------------------------------------
// Déclaration des méthodes de la classe Mère chaine
//------------------------------------------------------------------------------

chaine::chaine(void)
{
// Construit un nouveau objet prédéfini

adr = new char;
adr = NULL;
longueur = 0;
}

//------------------------------------------------------------------------------

chaine::chaine(char *aide)
{
// construit un nouveau objet avec la chaine de caractère
// transmise
cout<<"***********"<<"\n";
// adr = new char[strlen(aide)];
// adr = NULL;
adr = aide;
longueur = strlen(aide);
cout<<"longueur = "<<longueur<<aide<<endl;
}

//------------------------------------------------------------------------------

chaine::chaine(chaine &aide)
{
// construit un nouveau objet avec la chaine de caractère
// transmise
cout<<"&&&&&&&&&&&&&&"<<"\n";

adr = aide.adr;
longueur = aide.longueur;
}

//------------------------------------------------------------------------------

chaine::~chaine()
{
// Détruit l'objet

delete adr;
}

//------------------------------------------------------------------------------

void chaine::affiche(void)
{
if (longueur != 0)
cout<<adr<<endl;
else
cout<<"La chaine est vide."<<endl;
}

//------------------------------------------------------------------------------
// Déclaration des méthodes de la classe Fille chaine
//------------------------------------------------------------------------------

chaine_T::chaine_T(void)
{
// Construit un nouveau objet prédéfini

chaine::chaine();
Type = 0;
Val = 0;

// adr = NULL;
// longueur = 20;
}

//------------------------------------------------------------------------------

chaine_T::chaine_T(char *aide)
{
cout<<"Aide = "<<aide<<endl;
chaine::chaine(aide);cout<<"long = "<<longueur<<aide<<endl;
Type = 0;
Val = 0;
}

//------------------------------------------------------------------------------

void chaine_T::affiche(void)
{
chaine::affiche();
cout<<"\nLongueur = "<<longueur<<"\nType = "<<Type<<"\nVal = "<<Val;
}

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Fonction principale
//------------------------------------------------------------------------------

void main()
{
// Déclaration des variables locales

chaine a("Bonjour");
a.affiche();

chaine b(a);
b.affiche();

chaine_T e("Salut");
e.affiche();

// Fin du programme attente d'une touche pour arrêter

getch();
}

7 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 juil. 2004 à 11:40
ca te gene pas d'ecrire des truc comme ca ?

adr = new char;
adr = NULL;

adr = aide;
longueur = strlen(aide);

a mon avis tu devrais tout refaire car c'est tres dangereux et ca tient du miracle si la classe mere fonctionne

oublie pas les methodes virtuel et surtout le destructeur virtuel
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 juil. 2004 à 11:49
class Mystic {
...
};

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 juil. 2004 à 11:55
ouai c'est un peu ca
0
gdefrance Messages postés 7 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 1 juin 2005
24 juil. 2004 à 12:27
j'ai un peu de mal à tout assimiler, je suis des cours par correspondance et s'est pas facile tout seul.
ne m'en vouler pas d'être de faire beaucoup d'erreur, je suis novice
Merci à tout ceux qui m'aide, je vais suivre vos conseil et tout recommencer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 juil. 2004 à 12:37
si tu veux, un bon cours sur les classes en c++
http://cowww.epfl.ch/infgmel/doc/coursCpp/c2696.html

normalement dans ton constructeur tu devrais faire

chaine::chaine(const char *aide)
{

longueur = strlen(aide);
adr = new char[longueur+1];

strcpy(adr,aide);
}

dans le constructeur par defaut

chaine::chaine(void)
{
adr = 0;
longueur = 0;
}
dans l'operateur chaine& operator (const chaine&c)
{
if( this == &c ) return *this;

delete[] adr;
longueur = c.longueur;
adr = new char[longueur+1];
strcpy( adr, c.adr);
return *this;
}

dans le destructeur

chaine::~chaine()
{
// Détruit l'objet

delete[] adr;
}
0
gdefrance Messages postés 7 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 1 juin 2005
24 juil. 2004 à 13:29
Merci djl, Je vais fouiller le site que tu m'as donné en lien qui me parrait super complet.
A+
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 juil. 2004 à 17:53
il l'est, et surtout tu peux faire confiance à ce qui est enseigné dedans
0
Rejoignez-nous