Exercices en langage C++ by Claude Delannoy

Exercices en langage C++ by Claude Delannoy

Auteur:Claude Delannoy [Delannoy, Claude]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2007-07-05T09:11:40+00:00


exos_c++.book Page 167 Jeudi, 5. juillet 2007 11:10 11

chapitre n° 11

Surdéfinition d’opérateurs

main()

{ set_int ens(10) ;

ens < 25 < 2 < 25 < 3 ;

cout << (ens[25]) << " " << (ens[5]) << "\n" ;

}

1 0

Exercice 89

Énoncé

Soit une classe vecteur3d définie comme suit :

class vecteur3d

{ float v [3] ;

public :

vecteur3d (float c1=0.0, float c2=0.0, float c3=0.0)

{ v[0] = c1 ; v[1] = c2 ; v[2] = c3 ;

}

// à compléter

} ;

Définir l’opérateur [] de manière que :

• il permette d’accéder « normalement » à un élément d’un objet non constant de type

vecteur3d , et cela aussi bien dans une expression qu’en opérande de gauche d’une

affectation ;

• il ne permette que la consultation (et non la modification) d’un objet constant de type

vecteur3d (autrement dit, si v est un tel objet, une instruction de la forme v[i] = ...

devra être rejetée à la compilation).

Rappelons que lorsque l’on définit des objets constants (qualificatif const), il n’est pas possible de leur appliquer une fonction membre publique, sauf si cette dernière a été déclarée avec le

qualificatif const (auquel cas, elle peut indifféremment être utilisée avec des objets constants ou non constants). Ici, nous devons donc définir une fonction membre constante de nom

operator

[].

Par ailleurs, pour qu’une affectation de la forme v[i] = ... soit interdite, il est nécessaire que notre opérateur renvoie son résultat par valeur (et non par adresse comme on a généralement l’habitude de le faire).

© Éditions Eyrolles

167

exos_c++.book Page 168 Jeudi, 5. juillet 2007 11:10 11

Exercices en langage C++

Dans ces conditions, on voit qu’il est nécessaire de prévoir deux fonctions membre différen-

tes, pour traiter chacun des deux cas : objet constant ou objet non constant. Le choix de la

« bonne fonction » sera assuré par le compilateur, selon la présence ou l’absence de l’attribut const pour l’objet concerné.

Voici la définition complète de notre classe, accompagnée de la définition des deux fonctions

operator [] :

class vecteur3d

{ float v [3] ;

public :

vecteur3d (float c1=0.0, float c2=0.0, float c3=0.0)

{ v[0] = c1 ; v[1] = c2 ; v[2] = c3 ;

}

float operator [] (int) const ; // [] pour un vecteur constant

float & operator [] (int) ; // [] pour un vecteur non constant

} ;



Télécharger



Déni de responsabilité:
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.