Problème avec les classes filles

Signaler
Messages postés
7
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
1 juin 2005
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
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

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
class Mystic {
...
};

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ouai c'est un peu ca
Messages postés
7
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
1 juin 2005

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.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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;
}
Messages postés
7
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
1 juin 2005

Merci djl, Je vais fouiller le site que tu m'as donné en lien qui me parrait super complet.
A+
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
il l'est, et surtout tu peux faire confiance à ce qui est enseigné dedans