English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonction

C++ Tableau & Chaîne

C++ Structure de données

C++ Classe & Objet

C++ Pointeurs

C++ Héritage

C++ STL Tutoriel

C++ Manuel de référence

C++ Constructeur

Dans cet article, vous allez apprendre C ++Vous allez apprendre ce qu'est un constructeur, comment le créer et C ++du type de constructeur dans la classe.

Le constructeur est un type spécial de fonction membre, qui est appelé lors de la créationObjetsera automatiquement initialisé.

Le compilateur identifie la fonction membre donnée comme un constructeur par son nom et son type de retour.

Le constructeur a le même nom que la classe et n'a pas de type de retour. De plus, le constructeur est toujours public.

... .. ...
class temporary
{
private: 
    int x;
    float y;
public:
    // Constructeur
    temporary(): x(5), y(5.5)
    {
        // Corps du constructeur
    }
    ... ..  ...
};
int main()
{
    Temporary t1;
    ... .. ...
}

Le programme ci-dessus montre le constructeur défini, sans type de retour et avec un nom identique à celui de la classe.

Comment fonctionne un constructeur ?

Dans le code ci-dessus, temporary() est un constructeur.

Lors de la création d'un objet de classe, le constructeur temporary est automatiquement appelé et x est initialisé.5et ensuite y est initialisé à5.5.

Vous pouvez également initialiser les membres de données du constructeur de la manière suivante. Cependant, ce méthode n'est pas recommandée.

temporary()
{
   x = 5;
   y = 5.5;
}
// Cette méthode n'est pas recommandée.

Dans C ++En utilisant le constructeur

Supposons que vous traitiez100 objets Person, et la valeur par défaut du membre de données age est 0. Initialiser manuellement tous les objets serait une tâche très fastidieuse.

Au lieu de cela, vous pouvez définir un constructeur d'initialisation de l'âge à 0. Ce que vous avez à faire ensuite, c'est créer un objet Person, le constructeur initialisera automatiquement l'âge.

Ces situations se produisent souvent lors du traitement des tableaux d'objets.

De plus, si vous souhaitez exécuter un certain code immédiatement après la création de l'objet, vous pouvez placer le code dans le corps du constructeur.

Exemple1: C ++Dans la méthode de constructeur

Calculer et afficher la surface du rectangle.

#include <iostream>
using namespace std;
class Area
{
    private:
       int longueur;
       int largeur;
    public:
       // Constructeur
       Area(): longueur(5), largeur(2){}
       void GetLength()
       {
           cout << "Entrez respectivement la longueur et la largeur: ";
           cin >> longueur >> largeur;
       }
       int AreaCalculation() { return (length * breadth); }
       void DisplayArea(int temp)
       {
           cout << "Surface: " << temp;
       }
};
int main()
{
    Surface A1, A2;
    int temp;
    A1.GetLength();
    temp = A1.AreaCalculation();
    A1.DisplayArea(temp);
    cout << endl << "La surface par défaut lorsque les valeurs ne sont pas obtenues de l'utilisateur est:" << endl;
    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);
    return 0;
}

Dans ce programme, créez la classe Area pour gérer les fonctions liées à la surface. Elle a deux membres de données length et breadth.

Défini une initialisation de length5et breadth sont2Le constructeur.

Nous avons également trois fonctions membres supplémentaires GetLength(), AreaCalculation() et DisplayArea(), respectivement pour obtenir la longueur de l'utilisateur, calculer la surface et afficher la surface.

Lors de la création de l'objet A1et A2En raison de la relation du constructeur, les longueurs (length) et les largeurs (breadth) des deux objets sont respectivement initialisées à5et2.

Ensuite, appeler la fonction membre GetLength(), qui obtient l'objet A1Les valeurs de longueur (length) et de largeur (breadth). Cela change l'objet A1La longueur (length) et la largeur (breadth).

Ensuite, appeler la fonction AreaCalculation() pour calculer l'objet A1La surface et la stocker dans la variable temp, puis l'afficher.

Pour l'objet A2Ne nécessitant pas que l'utilisateur fournisse des données. Par conséquent, la longueur (length) et la largeur (breadth) sont respectivement maintenues5et2.

Ensuite, calculez et affichez A2La surface est10.

Résultat de la sortie

Entrez respectivement la longueur et la largeur: 6
7
Surface: 42
La surface par défaut lorsque les valeurs ne sont pas obtenues de l'utilisateur est:
Surface: 10

Redéfinition de constructeur

Le constructeur peut également être similaireSurcharge de la fonctionMode de surcharge.

Les constructeurs surchargés ont le même nom (le nom de la classe), mais le nombre de paramètres est différent.

Selon le nombre et le type des paramètres transmis, le constructeur spécifique sera appelé.

En raison de l'existence de plusieurs constructeurs, les paramètres du constructeur doivent également être transmis lors de la création d'un objet.

Exemple2Surcharge du constructeur

// Démonstration du principe de fonctionnement du constructeur surchargé
#include <iostream>
using namespace std;
class Area
{
    private:
       int longueur;
       int largeur;
    public:
       // Constructeur sans paramètre
       Area(): longueur(5), largeur(2{
       // Il y a deux constructeurs
       Area(int l, int b): longueur(l), largeur(b){}
       void GetLength()
       {
           cout << "Saisissez respectivement la longueur et la largeur : ";
           cin >> longueur >> largeur;
       }
       int AreaCalculation() { return longueur} * largeur;}
       void DisplayArea(int temp)
       {
           cout << "Surface: " << temp << endl;
       }
};
int main()
{
    Surface A1, A2(2, 1);
    int temp;
    cout << "Surface par défaut lorsque aucun paramètre n'est transmis." << endl;
    temp = A1.AreaCalculation();
    A1.DisplayArea(temp);
    cout << "("2,1lors de la transmission en tant que paramètre.
    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);
    return 0;
}

Pour l'objet A1lors de la création de l'objet sans transmettre de paramètres.

Donc, le constructeur sans paramètre sera appelé, qui initialisera la longueur (length) en5la largeur (breadth) est initialisée à2Ainsi, l'objet A1La surface sera10.

Pour l'objet A2lors de la création de l'objet.2et1en tant que paramètre.

Donc, le constructeur avec deux paramètres sera appelé, qui initialisera la longueur (length) en l (dans ce cas,2Ainsi, l'objet A1Ainsi, l'objet A2La surface sera2.

Résultat de la sortie

Surface par défaut lorsque aucun paramètre n'est transmis.
Surface: 10
(2,1lors de la transmission en tant que paramètre.
Surface: 2

Constructeur de copie par défaut

Un objet peut être initialisé avec un autre objet de même type. Cela est similaire à copier le contenu d'une classe dans une autre classe.

Dans le programme ci-dessus, si vous souhaitez initialiser un objet A3pour qu'il contienne les mêmes valeurs que A2Pour exécuter des valeurs identiques, vous pouvez faire ainsi:

....
int main()
{
   Surface A1, A2(2, 1);
   // Copier A2contenu de A3
   Surface A3(A2);
     OU 
   Surface A3 = A2;
}

Vous pourriez penser qu'il faut créer un nouveau constructeur pour exécuter cette tâche. Mais, il n'est pas nécessaire de créer un constructeur supplémentaire. C'est parce que par défaut, le constructeur de copie est intégré à toutes les classes.