• Aucun résultat trouvé

4 – Programmation orientée objet

N/A
N/A
Protected

Academic year: 2022

Partager "4 – Programmation orientée objet"

Copied!
5
0
0

Texte intégral

(1)

Exercices ACOO

4 – Programmation orientée objet

1. Héritage

On considère les déclarations C++ suivante, qui sont correctement compilées.

class Point {

private:

double x, y;

public:

double GetX();

void SetX(double value);

double GetY();

void SetY(double value);

void DisplayProperties();

};

typedef enum { Red = 0, Yellow = 1, Green = 2,

Cyan = 3, Blue = 4, Magenta = 5 } Color;

class ColoredPoint: public Point {

private:

Color color;

public:

Color GetColor();

void SetColor(Color value);

void DisplayProperties();

};

Quels sont les champs et les méthodes que l’on retrouve dans les objets de classe Point, PointCouleur ?

Contenu dans un objet de type

Champs / Méthodes Point ColoredPoint

x GetX

DisplayProperties color

GetColor

(2)

Exercices ACOO

2. Appel de méthodes

Les méthodes des classes Point et ColoredPoint sont implémentées de la façon suivante :

// class Point

double Point::GetX() {

return x;

}

void Point::SetX(double value) {

x = value;

}

double Point::GetY() {

return y;

}

void Point::SetY(double value) {

y = value;

}

void Point::DisplayProperties() {

cout << "{ X: " << x << " ; Y: " << y << "}";

}

// class ColoredPoint

void ColoredPoint::DisplayProperties() {

cout << "{ X: " << GetX() << " ; Y: " << GetY() <<

" ; Color: " << color << "}";

}

Color ColoredPoint::GetColor() {

return color;

}

(3)

Exercices ACOO Qu’affichera le programme ci-dessous ?

int main() {

Point p1;

ColoredPoint p2;

p1.SetX(1.0);

p1.SetY(0.0);

p2.SetX(0.0);

p2.SetY(2.0);

p2.SetColor(Blue);

cout << "P1: ";

p1.DisplayProperties();

cout << endl;

cout << "P2: ";

p2.DisplayProperties();

cout << endl;

return 0;

}

(4)

Exercices ACOO

3. Méthodes virtuelles

On modifie le programme de la façon suivante : void test(const char * name, Point & p) {

cout << name << ": ";

p.DisplayProperties();

cout << endl;

}

int main() {

Point p1;

ColoredPoint p2;

p1.SetX(1.0);

p1.SetY(0.0);

p2.SetX(0.0);

p2.SetY(2.0);

p2.SetColor(Blue);

test("P1", p1);

test("P2", p2);

return 0;

}

Ce programme produit l’affichage suivant :

Etonnamment, l’affichage obtenu ne mentionne pas la couleur pour le point p2.

Il suffit de modifier une seule ligne dans l’ensemble du code source pour que l’affichage du point p2 fonctionne correctement, (et inclut bien l’affichage de la couleur).

Quel mécanisme du C++ faut il utiliser, et quelle modification faut-il apporter

(5)

Exercices ACOO

4. Passage par valeur et par référence

Le programme fonctionne maintenant correctement.

Le programmeur choisit finalement d’utiliser un passage de paramètre par valeur plutôt que par référence pour la fonction test. Le seul changement apporté se trouve au niveau du prototype de la fonction test:

void test(const char * name, Point p) {

cout << name << ": ";

p.DisplayProperties();

cout << endl;

}

int main() {

Point p1;

ColoredPoint p2;

p1.SetX(1.0);

p1.SetY(0.0);

p2.SetX(0.0);

p2.SetY(2.0);

p2.SetColor(Blue);

test("P1", p1);

test("P2", p2);

return 0;

}

Après cette modification, l’affichage obtenu est le suivant :

Pourquoi la couleur n’est elle plus affichée pour le point P2 ?

Références

Documents relatifs

une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, accéder à la liste des articles commandés ainsi que prix total des

On peut donc voir les points A et B de l’exemple ci-dessous comme deux instances d’une classe Point ayant pour attributs les coordonnées x et y et comme méthodes des fonctions

Si l'on appel notre méthode publique Animaux() depuis une instance de $zoo, cela va retourner de manière sécurisée notre tableau d'animaux stocké dans notre classe, et personne ne

Les exemples de code sont écrits en C#, mais sont facilement transposables à d'autres langages orientés objets comme

L’interpréteur java permet d’exécuter une application écrite en langage java (autre qu’une applet), plus spécifiquement un fichier ClassName.class (i.e le java bytecodes). Par

Une interface est introduite par le mot clé « interface », et se comporte comme une classe dont toutes les méthodes sont abstract et dont tous les attributs sont final. Les mots

Additionner deux vecteurs donnés ; on écrira pour cela une méthode statique nommée aussi addition (en utilisant ainsi la possibilité de la surcharge) qui recevra en

Les classes dérivées peuvent définir les propres membres, mais aussi redéfinir les méthodes de la classe mère. class particule