Les structures en C++ et la différence avec les structures en C

13 Aug 2021 13 Aug 2021 5080 vues ESSADDOUKI Mostafa 2 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

En C++, les structures (struct) et les classes (class) sont presque identiques. La seule différence fondamentale réside dans la visibilité par défaut : struct est publique par défaut, class est privée par défaut.

struct vs class en C++

En C++, struct et class sont équivalents, à ceci près que dans une struct les membres sont public par défaut, alors que dans une class ils sont private par défaut.

Différences importantes entre C et C++

Le tableau suivant résume les extensions apportées aux structures en C++ par rapport au C :

Fonctionnalitéstruct Cstruct C++
Mot-clé struct obligatoire pour déclarer une variable✅ Oui❌ Non (optionnel)
Fonctions membres❌ Non✅ Oui
Initialisation directe des données membres❌ Non✅ Oui
Constructeurs❌ Non✅ Oui
Membres statiques❌ Non✅ Oui
Modificateurs d'accès (public, private, protected)❌ Non✅ Oui

1. Utilisation du mot-clé struct

En C, déclarer une variable nécessite le préfixe struct. En C++, le nom de la structure seul suffit.

// C : obligatoire
struct etudiant et;

// C++ : optionnel
etudiant et;

2. Fonctions membres

Les structures C ne peuvent pas contenir de fonctions membres. En C++, elles le peuvent.

struct etudiant {
    int age;
    void setAge(int v) { age = v; }
    int getAge()       { return age; }
};
Erreur en C
p1.c:5:5: error: expected ':', ',', ';', '}' before '{' token

3. Initialisation directe des données

// Interdit en C, autorisé en C++
struct etudiant {
    int age = 15;
};

4. Constructeurs dans la structure

// C++ uniquement
struct etudiant {
    int age;
    etudiant(int val) { age = val; }
};

int main() {
    etudiant et(15);
    cout << et.age << endl;
    return 0;
}

5. Membres statiques

// C++ uniquement
struct etudiant {
    int age;
    static int code;
};
Erreur en C
p1.c:5:5: error: expected specifier-qualifier-list before 'static'

6. Modificateurs d'accès

// C++ uniquement
struct etudiant {
private:
    int age;
public:
    int code;
};
Erreur en C
p1.c:4:5: error: expected specifier-qualifier-list before 'private'
À retenir

En C++, préférez class à struct dès que vous avez besoin d'encapsulation (membres privés, constructeurs, méthodes). Réservez struct aux agrégats simples de données sans logique.

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.