Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies.


Politique de confidentialité

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

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

Les structures utilisées en c/c++ pour définir un type défini par l'utilisateur, dans le dernier cours nous avons parlé des structures en c, et dans ce cours, nous discuterons des structures en c++ et la différence entre les deux.

En C++, structures (struct) et classes (class) sont exactement les mêmes choses, sauf que struct a par défaut la visibilité publique et class par défaut la visibilité privée. La sécurité est donc la chose la plus importante pour les structures et les classes. Une structure n'est pas sûre car elle ne peut pas cacher ses détails d'implémentation à l'utilisateur final, alors qu'une classe est sûre car elle peut cacher ses détails de programmation et de conception.

Pour voir la syntaxe de base des structures, cliquez ici

Quelques différences importantes entre les structures C et C++ :

Utilisation du mot-clé struct

En C, nous devons utiliser struct pour déclarer une variable struct. En C++, struct n'est pas nécessaire. pour déclarer une variable de structure en C, il faut utiliser "struct nom_structure". En C++, nous n'avons pas besoin d'utiliser struct, et l'utilisation de "nom_structure" fonctionnerait uniquement.

#include <stdio.h>
 
struct etudiant {
    int age; // initialisation des données
};
 
// programme principal
int main()
{
    struct etudiant et;
    // ...
    return 0;
}
                                                
#include 
using namespace std;
 
struct etudiant {
    int age; // initialisation des données
};
 
// programme principal
int main()
{
    etudiant et;
    // ....
    return 0;
}
                                                

Fonctions membres à l'intérieur de la structure

Les structures en C ne peuvent pas contenir de fonctions membres, mais les structures en C++ peuvent avoir des fonctions membres et des données membres.

#include <stdio.h>
struct etudiant {
    int age;
    void setAge(int v)   // fonction membre pour modifier l'age
    {
        age = v;
    }
    int getAge()  //  fonction pour retourner l'age
    {
        return age
    }
};
// programme principal
int main()
{
    struct etudiant et1;
    et1.setAge(15); // Modifier l'age par 15
    printf("%d", et1.getNote()); // afficher l'age de l'étudiant
}
                                            
#include <iostream>
using namespace std;

struct etudiant {
    int age;
    void setAge(int v)   // fonction membre pour modifier l'age
    {
        age = v;
    }
    int getAge()  //  fonction pour retourner l'age
    {
        return age;
    }
};
// programme principal
int main()
{
    struct etudiant et1;
    et1.setAge(15); // Modifier l'age par 15
    cout << "Note : " << et1.getAge(); // afficher l'age de l'étudiant
}
                                                

Lorsque les programmes ci-dessus s'exécutent, le programme c génère l'erreur ci-dessous, mais c++ fonctionne parfaitement

p1.c:5:5: error: expected ':', ',', ';', '}' or '__attribute__' before '{' token
     {
     ^
p1.c: In function 'main':
p1.c:17:8: error: 'struct etudiant' has no member named 'setAge'
     et1.setAge(15); // Modifier l'age par 15
        ^
p1.c:18:21: error: 'struct etudiant' has no member named 'getNote'
     printf("%d", et1.getNote()); // afficher l'age de l'étudiant
     

Initialisation des données

Nous ne pouvons pas initialiser directement les données membres d'une structure en C mais nous pouvons le faire en C++.

#include <stdio.h>
 
struct etudiant {
    int age = 15; // initialisation des données
};
 
// programme principal
int main()
{
    struct etudiant et;
    printf("%d", et.age);
    return 0;
}
                                                
#include <iostream>
using namespace std;
 
struct etudiant {
    int age = 15; // initialisation des données
};
 
// programme principal
int main()
{
    etudiant et;
    cout << et.age << endl;
    return 0;
}
                                                

Lorsque les programmes ci-dessus s'exécutent, le programme c génère l'erreur ci-dessous, mais c++ fonctionne parfaitement

p1.c:4:13: error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
     int age = 15; // initialisation des données
             ^
p1.c: In function 'main':
p1.c:11:20: error: 'struct etudiant' has no member named 'age'
     printf("%d", et.age);
                    ^
                                            

Création de constructeur dans la structure

Les structures en C ne peuvent pas avoir de constructeur à l'intérieur, mais les structures en C++ peuvent avoir un constructeur comme dans la classe.

#include <stdio.h>
 
struct etudiant {
    int age;
    etudiant(int val)
    {
        age = val;
    }
};
// programme principal
int main()
{
    struct etudiant et(15);
    printf("%d", et.age);
    return 0;
}
                                                
#include <iostream>
using namespace std;
 
struct etudiant {
    int age;
    etudiant(int val)
    {
        age = val;
    }
};
 
// programme principal
int main()
{
    etudiant et(15); // création et initialisation avec l'appel du contructeur
    cout < et.age < endl;
    return 0;
}
                                                
p1.c:5:5: error: expected specifier-qualifier-list before 'etudiant'
     etudiant(int val)
     ^~~~~~~~
p1.c: In function 'main':
p1.c:13:24: error: expected declaration specifiers or '...' before numeric constant
     struct etudiant et(15);
                        ^~
p1.c:14:18: error: 'et' undeclared (first use in this function); did you mean 'getw'?
     printf("%d", et.age);
                  ^~
                  getw
p1.c:14:18: note: each undeclared identifier is reported only once for each function it appears in
                                            

Membres statiques

Les structures C ne peuvent pas avoir de membres statiques mais sont autorisées en C++.

#include <stdio.h>
 
struct etudiant {
    int age;
    static int code;
};
// programme principal
int main()
{
    
    return 0;
}
                                                
#include <iostream>
using namespace std;
 
struct etudiant {
    int age;
    static int code;
};
 
// programme principal
int main()
{
    return 0;
}
                                                

Cela générera une erreur en C mais fonctionnera parfaitement en C++.

p1.c:5:5: error: expected specifier-qualifier-list before 'static'
     static int code;
     ^~~~~~
                                            

Modificateurs d'accès

Les structures C n'ont pas de modificateurs d'accès car ces modificateurs ne sont pas pris en charge par le langage. Les structures C++ peuvent avoir ce concept car il est intégré au langage.

#include <stdio.h>
 
struct etudiant {
    private :
        int age;
    public:
        int code;
};
// programme principal
int main()
{
    
    return 0;
}
                                                
#include <iostream>
using namespace std;
 
struct etudiant {
    private :
        int age;
    public:
        int code;
};
 
// programme principal
int main()
{
    return 0;
}
                                                

Lorsque les programmes ci-dessus s'exécutent, le programme c génère l'erreur ci-dessous, mais c++ fonctionne parfaitement

p1.c:4:5: error: expected specifier-qualifier-list before 'private'
     private :
     ^~~~~~~
                                            

Rédigé par ESSADDOUKI Mostafa

The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.

Partager ce cours avec tes amis :

Commentaire(s)