Fonction et Classe Amie en c++?

zied9992000 Messages postés 9 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 7 mars 2009 - 9 déc. 2008 à 17:44
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 9 déc. 2008 à 20:26
Bonjour , chui debutant en c++, Quelqu'un m'explique qu'est ce qu'une Class et Fonction amie et quels
sont les avantages de leurs utilisations dans un programme c++, (un
exemple si vous voulez) et merci d'avance les amis !

3 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
9 déc. 2008 à 20:00
Fonction amie -> jamais entendu parler.
Class -> c'est la POO (Programmation Orientée Objet).
EN gros, en C, le code est organisé en fonctions (c'est un langage fonctionnel). C'est à dire que les données sont stockées dans des variables, et les opérations se font grace à ces fonctions.
Par exemple :
#include <stdio.h>
int carre(int x) {
    return(x*x);
}
int main() {
    int nombre= 5 ;
    int carre_nombre =carre(nombre);
    printf("Le carre de %d est %d",nombre,carre_nombre);
    return0;
}

Le C++ a intégré la POO, c'est à dire que chaque "élément" du programme est considéré comme un objet (ou une instance de telle ou telle classe).
Petit exemple de la vie courante : imagine la classe "voiture".
Cette classe contient des propriétés (nommées attributs), comme par exemple le nombre de portes, la vitesse max, le nombre de places, la taille du réservoir, etc...
On peut également interagir sur cette classe ("voiture"), comme par exemple avancer, reculer, tourner à droite ou à gauche, etc... On appelle ça les méthodes.
Et bien avec cette classe "voiture", tu peux par exemple déclarer un modèle "Renault_Megane". Ainsi tu lui attribues 5 portes, une vitesse max assez élevée, etc... Ce modèle "Renault_Megane" est appelé instance de la classe "voiture".

En C++ c'est pareil, ton programme sera organisé en classes, et n'auras qu'à interagir sur ses instances.
Quel intêret ? Et ben... Regarde les jeux vidéos par exemple. Tu déclares par exemple une classe "Adversaires", en lui attribuant une position, un level, un niveau de vie, etc... et si dans ton jeu tu as 3 adversaires, alors tu déclares 3 instances de cette même classe.
Pour le code, c'est assez "complexe" à comprendre, surtout si tu débutes, mais en gros voilà un exemple :
Je déclarer une classe "Adversaires" contenant une position (x et y, on va dire que c'est en 2D ^^), un level, un niveau de vie, et des méthodes (pour agir se l'instance) comme se déplacer ou tirer.
class Adversaires {
    public:
    Adversaires(intx,inty); //Constructeur de la classe
    void tirer();//Tirer
    void se_deplacer(int x,int y);//Se déplacer
    private:
    int x;//Coordonnée sur l'axe des abscisses
    int y;//Coordonnée sur l'axe des ordonnées
    int level;//Level
    int vie;//Niveau de vie
};
Si tu ne comprends pas le code, disons que c'est normal, j'espère cependant avoir pu t'aider (repense à l'exemple des voitures dans la vie courante ou des adversaires dans un jeu vidéo).

Cordialement, uaip.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 déc. 2008 à 20:23
Mettre une classe ou une fonction amie permet à cette même fonction ou classe de pouvoir accéder au membre private (methodes, attrbuts, etc) de la classe "hôte".

Exemple avec les fonctions amies:

class Toto {
    int privee;

public:
    void afficher () { cout << privee << endl; };

    friend void modifier(Toto &, int);
};

void modifier (Toto &c, int i) {
    c.privee = i;
}

int main ()
{
    Toto ttt;

    modifier(ttt, 8);

    ttt.afficher();

    return 0;
}

modifier peut accéder à l'attribut privee qui est private. Sans le friend, il ne pourrait pas.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 déc. 2008 à 20:26
Oups j'ai mis un ; de trop après le corps de la méthode afficher:
void afficher () { cout << privee << endl; }; <<<----

Pas bien grave mais bon...

C++ (@++)<!--
0
Rejoignez-nous