Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Fonction amie C++ et classes amies

Fonction amie C++ et classes amies

Dans ce tutoriel, nous allons apprendre à créer des fonctions amies et des classes amies en C++ à l'aide d'exemples.

Le masquage de données est un concept fondamental de la programmation orientée objet. Il restreint l'accès des membres privés de l'extérieur de la classe.

De même, les membres protégés ne sont accessibles que par les classes dérivées et sont inaccessibles de l'extérieur. Par exemple,

class MyClass {
    private:
        int member1;
}

int main() {
    MyClass obj;

    // Error! Cannot access private members from here.
    obj.member1 = 5;
}

Cependant, il existe une fonctionnalité en C++ appelée fonctions amies qui enfreignent cette règle et nous permettent d'accéder aux fonctions membres depuis l'extérieur de la classe.

De même, il existe une classe d'amis également, ce que nous apprendrons plus tard dans ce didacticiel.

Fonction ami en C++

Une fonction ami peut accéder au domaine privé et protégé données d'une classe. On déclare une fonction ami en utilisant le friend mot-clé dans le corps de la classe.

class className {
    ... .. ...
    friend returnType functionName(arguments);
    ... .. ...
}

Exemple 1 :Fonctionnement de la fonction friend

// C++ program to demonstrate the working of friend function

#include <iostream>
using namespace std;

class Distance {
    private:
        int meter;
        
        // friend function
        friend int addFive(Distance);

    public:
        Distance() : meter(0) {}
        
};

// friend function definition
int addFive(Distance d) {

    //accessing private members from the friend function
    d.meter += 5;
    return d.meter;
}

int main() {
    Distance D;
    cout << "Distance: " << addFive(D);
    return 0;
}

Sortie

Distance: 5

Ici, addFive() est une fonction d'ami qui peut accéder à la fois privé et public membres de données.

Bien que cet exemple nous donne une idée du concept de fonction d'ami, il ne montre aucune utilisation significative.

Une utilisation plus significative serait d'opérer sur des objets de deux classes différentes. C'est alors que la fonction ami peut être très utile.

Exemple 2 :Ajouter des membres de deux classes différentes

// Add members of two different classes using friend functions

#include <iostream>
using namespace std;

// forward declaration
class ClassB;

class ClassA {
    
    public:
        // constructor to initialize numA to 12
        ClassA() : numA(12) {}
        
    private:
        int numA;
        
         // friend function declaration
         friend int add(ClassA, ClassB);
};

class ClassB {

    public:
        // constructor to initialize numB to 1
        ClassB() : numB(1) {}
    
    private:
        int numB;
 
        // friend function declaration
        friend int add(ClassA, ClassB);
};

// access members of both classes
int add(ClassA objectA, ClassB objectB) {
    return (objectA.numA + objectB.numB);
}

int main() {
    ClassA objectA;
    ClassB objectB;
    cout << "Sum: " << add(objectA, objectB);
    return 0;
}

Sortie

Sum: 13

Dans ce programme, ClassA et ClassB ont déclaré add() en tant que fonction d'ami. Ainsi, cette fonction peut accéder à privé données des deux classes.

Une chose à remarquer ici est la fonction ami à l'intérieur de ClassA utilise le ClassB . Cependant, nous n'avons pas défini ClassB à ce stade.

// inside classA 
friend int add(ClassA, ClassB);

Pour que cela fonctionne, nous avons besoin d'une déclaration avancée de ClassB dans notre programme.

// forward declaration
class ClassB;

classe ami en C++

Nous pouvons également utiliser une classe amie en C++ en utilisant le friend mot-clé. Par exemple,

class ClassB;

class ClassA {
   // ClassB is a friend class of ClassA
   friend class ClassB;
   ... .. ...
}

class ClassB {
   ... .. ...
}

Lorsqu'une classe est déclarée classe amie, toutes les fonctions membres de la classe amie deviennent des fonctions amies.

Depuis ClassB est une classe d'amis, nous pouvons accéder à tous les membres de ClassA de l'intérieur ClassB .

Cependant, nous ne pouvons pas accéder aux membres de ClassB de l'intérieur ClassA . C'est parce que la relation d'ami en C++ est seulement accordée, pas prise.

Exemple 3 :Classe ami C++

// C++ program to demonstrate the working of friend class

#include <iostream>
using namespace std;

// forward declaration
class ClassB;

class ClassA {
    private:
        int numA;

        // friend class declaration
        friend class ClassB;

    public:
        // constructor to initialize numA to 12
        ClassA() : numA(12) {}
};

class ClassB {
    private:
        int numB;

    public:
        // constructor to initialize numB to 1
        ClassB() : numB(1) {}
    
    // member function to add numA
    // from ClassA and numB from ClassB
    int add() {
        ClassA objectA;
        return objectA.numA + numB;
    }
};

int main() {
    ClassB objectB;
    cout << "Sum: " << objectB.add();
    return 0;
}

Sortie

Sum: 13

Ici, ClassB est une classe amie de ClassA . Donc, ClassB a accès aux membres de classA .

En ClassB , nous avons créé une fonction add() qui renvoie la somme de numA et numB .

Depuis ClassB est une classe amie, nous pouvons créer des objets de ClassA à l'intérieur de ClassB .


Langue C

  1. Classe et objet C#
  2. Classe abstraite et méthode C#
  3. Classe partielle C# et méthode partielle
  4. Classe et méthode scellées C#
  5. Classes et objets C++
  6. Différence entre structure et classe :expliquée avec un exemple C++
  7. Java - Objet et classes
  8. Classes de stockage en C++
  9. Date et heure C++