Qui va lentement va plus loin
CoolD
Bonjour à tous, je dois implémenter pour un exercice de classe une classe de chaine de carcatères. L'utilisateur doit pouvoir créér 1 chaine de plusieurs manières, prévoir les constructeurs appropriés.
NB: Les points theoriques vus sont: la notion de classe, de constructeurs par defaut et de copie, le début du C++ en quelque sorte
voila ce que j'ai fait mais il ya des erreurs(danss le main) et je n'arrive pas à me corriger
fichier .h
#ifndef
CCAHINE_H#define
CCHAINE_Hclass
CChaine{
public
:CChaine(
void);//constructeur par defautCChaine(
char &psChaine);//constructeur avec 1 paramètresCChaine(
const CChaine&);//constructeur par copievoid Affiche(void);//fonction d'affichage de la chiane de caractères~CChaine(
void);//destructeur de la classeprivate
:// longueur de la chaine de caractereint m_dLong;//pointeur de la chaine de caractèrechar *m_psTab; };
#endif
fichier.cpp
#include
"CChaine.h"#include
<iostream>#include
<assert.h>#include
<string.h>//*************************
// constructeur par defaut
//*************************
CChaine::CChaine(
void):m_dLong(0)
,m_psTab(NULL)
{
}
//***********************
//constructeur par copie
//***********************
CChaine::CChaine (
const CChaine &oCh):m_dLong(0)
,m_psTab(NULL)
{
m_dLong = oCh. m_dLong;
m_psTab =
newchar[m_dLong + 1];assert(m_psTab != 0);
strcpy(m_psTab , oCh.m_psTab);
}
//*****************************
//constructeur avec 1 paramètres
//*****************************
CChaine::CChaine(
char *psChaine):m_dLong(0)
,m_psTab(NULL)
{
m_dLong = strlen(psChaine);
m_psTab =
newchar [m_dLong + 1];assert (m_psTab != 0);
strcpy(m_psTab , psChaine);
}
CChaine::~CChaine(
void){
delete[] m_psTab;}
//*************************************************
// fonxtion d'affichage de la chiane de caractères
//*************************************************
void
CChaine::Affiche(void){
for(int dI = 0; dI < m_dLong; dI++)std::cout << m_psTab[dI];
}
et le fichier main.cpp
#include
"CChaine.h"#include
<stdexcept>#include
<limits>//pour std::limits#include
<iostream>//using namespace std; aurait pemis de ne pas ecrire std::cout
//**********************************************************************************
//Implémenter une classe CChaine. Chaque objet de cette classe représente
//une chaîne de caractères. Avec cette classe, l'utilisateur doit être capable de :
//. créer une chaîne de plusieurs manières différentes
// --> quels constructeurs faut-il prévoir ?
//. Définition du constructeur par copie
//***********************************************************************************
int
Menu(){
int dChoix = 0;//-----------------------------------------------------------// Affiichage du menu // lecture et verification du choix de l'utlisateur // Tant qu'input n'est pas 1 chiffre => ignoré// Traitement du cas où le choix ,'est pas dans l'intervalle // retour du choix//-----------------------------------------------------------std::cout <<
"Veuillez choisir 1 des actions suivantes :" << std::endl;while(dChoix < 1 || dChoix > 3){
std::cout <<
"1 - creer une nouvelle chaine " << std::endl<<
"2 - afficher la chaine " << std::endl<<
"3 - quitter" << std::endl;std::cout <<
"\nVotre choix ? ";while(!(std::cin >> dChoix)){
std::cout <<
"veuillez introduire s.v.p des chiffres uniquement..." << std::endl<<
"Votre choix ?";std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),
'\n');}
if(dChoix < 1 || dChoix > 3)std::cout <<
"veuillez choisir s.v.p une valeur entre 1 et 3" << std::endl;}
return dChoix;}
int
MenuCreation(){
int dChoixCr;//----------------------------------------------------------------------// Affiichage du menu pour les différentes manières pour créer 1 chaine// lecture et verification du choix de l'utlisateur // Traitement du cas ou le choix n'est pas 1 chiffre => ignoré// Traitement du cas où le choix,n'est pas dans l'intervalle // retour du choix//----------------------------------------------------------------------std::cout <<
"10 - creer une nouvele chaine avec le c'tor avec 1 parametre " << std::endl <<
"11 - creer une nouvele chaine avec le c'tor par copie " << std::endl <<
"12 - quitter" << std::endl;std::cout <<
"\nVotre choix ? ";while(!(std::cin >> dChoixCr)){
std::cout <<
"veuillez introduire des chiffres uniquement..."<<std::endl<<
"Votre choix ?";std::cin.clear();
std::cin.ignore( std::numeric_limits<std::streamsize>::max(),
'\n' );}
if(dChoixCr < 10 || dChoixCr > 12)std::cout <<
"veuillez choisir s.v.p une valeur entre 10 et 12" << std::endl;return dChoixCr;}
int
main(){
int dLong;std::cout <<
"Class CChaine\n\n"<<
"Application permettant la gestion de chaines de caracteres"<< std::endl;
std::cout <<
"Que voulez-vous faire ?";try{
//CChaine oChiane1;int dChoix = 0;while(dChoix != 3){
dChoix = Menu();
// on demande le choix de l'utilisateur switch(dChoix){
case 1: int dCh_Create = 0;char *sTabMsg;//while(dCh_Create != 13){
dCh_Create = MenuCreation();
switch(dCh_Create){
//---------------------------------------------------------//création de la chaine avec le construccteur à 1 paramètre//---------------------------------------------------------case 10:std::cout <<
"entrer la chaine " ;std::cin >> sTabMsg;
CChaine oChaine1(*sTabMsg);
break;//-----------------------------------------------------//création de la chaine avec le construccteur par copie//-----------------------------------------------------case 11:std::cout <<
" Entrer la chaine " ;std::cin >> sTabMsg;
CChaine oChaine1(*sTabMsg);
CChaine oChaine2(oChaine1);
break;default:break;}
}
break;case 2:oChaine1.Affiche();break;default:break;}
}
}
catch(std::bad_alloc &e){
std::cout <<
"une erreur est survenue lors de l'initialisation " << std::endl<<
"il m'est impossible de continuer"<<std::endl;return 1;//1 problème est survenu}
return 0;//tout est ok}
Merci d'avance