« Programmation C++/Les structures » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
m →‎Exemple : Les variables A et B sont deux structures de type Point. L'accès à un champ d'une structure se fait par l'opérateur point (.) : problème résolu !
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 20 : Ligne 20 :
L'exemple ci-dessous illustre l'utilisation d'une structure nommée <code>Position</code> comportant deux champs (appelées également variables membres) <code>x</code> et <code>y</code> de type <code>double</code>.
L'exemple ci-dessous illustre l'utilisation d'une structure nommée <code>Position</code> comportant deux champs (appelées également variables membres) <code>x</code> et <code>y</code> de type <code>double</code>.


<source lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>
#include <cmath>
#include <cmath>
Ligne 49 : Ligne 49 :
return 0;
return 0;
}
}
</syntaxhighlight>
</source>


Les variables <code>A</code> et <code>B</code> sont deux structures de type <code>Position</code>.
Les variables <code>A</code> et <code>B</code> sont deux structures de type <code>Position</code>.
Ligne 58 : Ligne 58 :
On peut écrire naturellement
On peut écrire naturellement


<source lang="cpp">
<syntaxhighlight lang="cpp">
Point* pA;
Point* pA;
cout << "Tapez l'abscisse de A : "; cin >> (*pA).x;
cout << "Tapez l'abscisse de A : "; cin >> (*pA).x;
cout << "Tapez l'ordonnée de A : "; cin >> (*pA).y;
cout << "Tapez l'ordonnée de A : "; cin >> (*pA).y;
</syntaxhighlight>
</source>


Pour faciliter la lecture et éviter les erreurs, on utilise l'opérateur <code>-></code>. On peut écrire <code>pA->x</code> à la place de <code>(*pA).x</code>. Attention, <code>*pA.x</code> donne une erreur de compilation, à cause de la [[Programmation C++/Les opérations de base#La liste complète des opérateurs du C++|priorité des opérateurs]].
Pour faciliter la lecture et éviter les erreurs, on utilise l'opérateur <code>-></code>. On peut écrire <code>pA->x</code> à la place de <code>(*pA).x</code>. Attention, <code>*pA.x</code> donne une erreur de compilation, à cause de la [[Programmation C++/Les opérations de base#La liste complète des opérateurs du C++|priorité des opérateurs]].


<source lang="cpp">
<syntaxhighlight lang="cpp">
Point* pA;
Point* pA;
cout << "Tapez l'abscisse de A : "; cin >> pA->x;
cout << "Tapez l'abscisse de A : "; cin >> pA->x;
cout << "Tapez l'ordonnée de A : "; cin >> pA->y;
cout << "Tapez l'ordonnée de A : "; cin >> pA->y;
</syntaxhighlight>
</source>


== Copier une structure ==
== Copier une structure ==
Ligne 76 : Ligne 76 :
Copier une structure se fait très simplement
Copier une structure se fait très simplement


<source lang="cpp">
<syntaxhighlight lang="cpp">
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
Ligne 99 : Ligne 99 :
return 0;
return 0;
}
}
</syntaxhighlight>
</source>


== Voir aussi ==
== Voir aussi ==

Version du 16 avril 2020 à 08:32

Présentation

Les structures permettent de regrouper plusieurs variables dans une même entité. Ainsi il est possible de construire de nouveaux types plus complexes.

Syntaxe

struct identificateur
{
    // liste des différents champs constituant notre structure
    // utilise la même syntaxe que la déclaration de variables
} [variables];

identificateur identifie le nouveau type de données. Une variable de ce type est donc précédé de struct identificateur ou identificateur car le mot struct est optionnel.

[variables] est optionnel et permet de déclarer une ou plusieurs variables de ce nouveau type.

Exemple

L'exemple ci-dessous illustre l'utilisation d'une structure nommée Position comportant deux champs (appelées également variables membres) x et y de type double.

#include <iostream>
#include <cmath>
using namespace std;

struct Position
{
    double x;
    double y;
};

int main()
{
    Position A, B;
    double dx, dy, distance;

    cout << "Tapez l'abscisse de A : ";  cin >> A.x;
    cout << "Tapez l'ordonnée de A : ";  cin >> A.y;
    cout << "Tapez l'abscisse de B : ";  cin >> B.x;
    cout << "Tapez l'ordonnée de B : ";  cin >> B.y;
 
    dx = A.x - B.x;
    dy = A.y - B.y;
    distance = sqrt( dx*dx + dy*dy );

    cout << "La distance AB vaut : " << distance << endl;

    return 0;
}

Les variables A et B sont deux structures de type Position. L'accès à un champ d'une structure se fait par l'opérateur point (.) séparant la variable structure du nom du membre accédé.

Pointeur vers une structure

On peut écrire naturellement

    Point* pA;
    cout << "Tapez l'abscisse de A : ";  cin >> (*pA).x;
    cout << "Tapez l'ordonnée de A : ";  cin >> (*pA).y;

Pour faciliter la lecture et éviter les erreurs, on utilise l'opérateur ->. On peut écrire pA->x à la place de (*pA).x. Attention, *pA.x donne une erreur de compilation, à cause de la priorité des opérateurs.

    Point* pA;
    cout << "Tapez l'abscisse de A : ";  cin >> pA->x;
    cout << "Tapez l'ordonnée de A : ";  cin >> pA->y;

Copier une structure

Copier une structure se fait très simplement

#include <iostream>
using namespace std;
 
struct Point
{
    double x;
    double y;
};
 
int main()
{
    Point A, B;
 
    A.x = 2.0;
    A.y = 3.0;
 
    B = A;
 
    cout << "A a été recopié dans B : " << B.x << ", " << B.y << endl;
 
    return 0;
}

Voir aussi