Classe, constructeurs, objets[devcpp][tc][cbuilder]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 643 fois - Téléchargée 35 fois

Contenu du snippet

Salut tt le monde,c est ma premiere contribution a cppfrance.
J espere que ce code vous sera utile.
Ceci est un exemple simple de classe avec les caracteristiques suivantes:
Redefinition du constructeur(et valeurs par defaut), 2 methodes de creation d objets(dyn/stat),les getter/setter et fonction membre.

Source / Exemple :

#include <iostream.h>
#include <conio.h>  //#include <conio.c> pour devcpp.

class Player

{
                                
    private :                                                                                       //Declarations(caracteristiques de chaque objet)

        char statut[20+1];
        int life;
        int defense;
        int power;

    public :
                     
        Player(char *stat="Samurai", int hp=200, int def=75, int pw=100);//Redefinition du constructeur avec valeurs par defaut.
        ~Player();
        
        int GetLife();//getter(int paskel renvoie un entier)
        void SetLife(int hp);//setter
        void show();
};
                                
                                                 
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Player::Player(char *stat, int hp, int def, int pw) //Constructeur.

{

        strcpy(statut, stat);
        life= hp;
        defense= def;
        power= pw;

}                                       

//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz


Player::~Player()

{

cout<<"\n\nl addresse m\202moire : " << this << " a \202t\202 lib\202r\202e.";
getch();

}

//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

int Player::GetLife()//Fonction Get qui permet l acces a une donnee private de la classe Player par une 
                                                                                 //main().Sinon impossible!
{

                 return life;

}


//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

void Player::SetLife(int hp)//Fonction Set ki permet la modification d une donnee private par
                                                                                                                //main().Sinon impossible!
                                                                                                                

{
                if(hp > 0 && hp<1000)//On controle la validité de la variable.
                
                {
                
                        life = hp;
                
                }

}



//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

void Player::show()//Fontion pour afficher les objets crees.

{
    cout<<"\n- Statut :" <<statut;
    cout<<"\n- Defense :" <<defense;
    cout<<"\n- Puissance :"<<power;
}


//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz


int main()

{

    cout<<"Creation d un objet statique\n\n";
                    
                    Player kyo1;                                                                                                                                                                                                                                                                
                    kyo1.show();
                    cout<<"\n- Life :" <<kyo1.GetLife() << "\t(Utilisation de GetLife() avec l objet kyo1)\n\n";
                    getch();                                                                                                                                                                                                                        
                    
    cout<<"\n\n\n[ Creation d'un objet dynamique ]\n\n";
                    
                    Player *kyo2;                                                                                                                                                                                                                                    
                    kyo2 = new Player("Magicien", 500, 100, 200);
                    
                    
                                                                                                                                                                                                                                                                                                                                                                                    
                    kyo2->show();
                    cout<<"\n- Life :" <<kyo2->GetLife() << "\t(Utilisation de GetLife() avec l objet kyo2)\n\n";
                    getch();                                                                                         
    cout<<"\n\nUtilisation de SetLife() sur l objet kyo2\n\n";
                    
                    kyo2->SetLife(999);
                    
                    kyo2->show();
                    cout<<"\n- Life :" << kyo2->GetLife() << "\t(La propri\202t\202 Life de l objet kyo2 est modifi\202e)\n\n";
                    getch();
                    delete kyo2;                                                                                                         
                    return 0;

}
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Conclusion :

Note : Le destructeur doit respecter 3 principes :1-Le destr ne contien pa d argument.
2-Il porte le nom de la classe
precédé de "~".
3-Il ne peut etre surchargé,on ne peut donc
definir kun seul destructeur par classe.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
10
Date d'inscription
lundi 9 décembre 2002
Statut
Membre
Dernière intervention
20 décembre 2002

Slt!!
G une question un peu indiscrete, tu compte faire quoi avec ce code?
L'incorporer à un jeu?
Tout seul, il sert un peu à rien...
Simple curiosité, enfin il presente plus d'interet que certains "hello world!" à la con.

>>merci pour le 20+1, mickbad, je connaissais pas!
Bonne prog les gars!
Messages postés
2
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
3 décembre 2002

Bonne idee,je ne connaissait pa etant donné ke je suis encor un pe novice,merci pr l info en tt cas!Ca me sera vraiment utile!

Vive le bts info!!!!
Messages postés
71
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
20 avril 2008

Salut, c'est bien mais il y a un truc qui me gène un peu:
* Player::Player(char *stat, int hp, int def, int pw) //Constructeur.
* {
* strcpy(statut, stat);

si je fais
Player* p = new Player("0123456789012345678901-et je dépasse la zone !");
ça plante (tu risques d'écrire dans un emplacement non alloué)
why ? ben "0123456789012345678901-et je dépasse la zone !" > 20 + 1 caractères

2 solutions:
- dans ton constructeur, utilise plutôt : strncpy(statut, stats, 20);
- remplace char statut[20+1] par char* statut; et ton constructeur devient
statut = (char*)calloc(strlen(stats) + 1, sizeof(char));
if (statut)
strcpy(statut, stats);

et dans ton destructeur, faut pas oublier de libérer statut avec
if (statut)
free(statut);

enfin juste dans l'idée ...
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
Non quand même pas pour l'héritage, mais fonctions get et set oui.
Messages postés
2
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
3 décembre 2002

Il est vrai que string.h ne sert a rien,dsl.Et kit a definir un constr et un destr autan mettre un exemple de getter/setter,et d heritage,tt ca.
Je reposterai une autre source plu complete sur les classes...bientot.
A++
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.