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<iostream.h>
#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();
}