Vous êtes sur la page 1sur 2

Département d’Informatique Pr. M.

El Ansari
Faculté des Sciences, Université Ibn Zohr 2015-2016
Agadir Session normale

Examen de C++ (2h), SMI & LP2I (Semestre 5)

Exercice 1: (8 pts) Considérons les deux classes suivantes:


class point{ int abs, ord;
public:
point(int a=0, int b=0) // constructeur P1
{cout<<"++const point "<<endl; abs=a; ord=b; }

point(const point & p) // constructeur P2


{ cout<<"++const copie point"<<endl;}

~point(){cout<<"--dest point"<<endl; }
};

class droite{ point s1,s2;


public:
droite(int a, int b, int c, int d); // constructeur D1
droite(const point & a,const point & b); // constructeur D2
~droite(){cout<<"--dest droite "<<endl;}
};

1. Donner la sortie du programme suivant:


main(){
point a, b(1,2);
droite A(1,2,3,4);
}

sachant que le constructeur D1 est défini comme suit:


droite::droite(int a, int b, int c, int d):s1(a,b),s2(c,d)
{ cout<<"++const droite-1"<<endl; }

2. Donner la sortie du même programme (question 1) si le constructeur D1 est défini


comme suit:
droite::droite(int a, int b, int c, int d)
{
s1 = point(a,b); s2 = point(c,d);
cout<<"++const droite-1"<<endl;
}

3. Donner la sortie du programme ci-dessous:


main(){
point a, b(1,2);
droite A(a,b);
}

si le constructeur D2 est défini par

Page 1/2
droite::droite(const point & a,const point & b):s1(a),s2(b){
cout<<"++const droite-2"<<endl;
}

4. Donner la sortie du même programme (question 3) si le constructeur D2 a le prototype


droite(point a,point b);
C’est à dire, le constructeur D2 utilise le passage par valeur au lieu du passage par
référence.
Exercice 2: (9 pts) Défnir une classe cercle utilisable pour manipuler les cercles. La
classe cercle a la forme suivante:
class point{ int abs, ord;
public: class cercle{
point(int a=0, int b=0) { point centre; // Le centre du cercle
cout<<"++const point "<<endl; int rayon; // Le rayon du cercle
abs=a; ord=b; } public:
point(const point & p) { cercle(int=0,int=0,int=0);
cout<<"++const copie point"<<endl;} cercle(point,int);
~point(){cout<<"--dest point"<<endl; } cercle(const cercle &);
}; };
1. Donner les définitions des trois constructeurs introduits dans la déclaration de la classe
cercle.
2. Surcharger l’opérateur >> afin qu’on puisse utiliser l’instruction suivante pour initialiser
les attributs d’un cercle à travers le clavier:
cercle A;
cin>>A; //saisir le coordonnées du centre et le rayon du cercle
3. Faire de même pour l’opérateur >> pour l’affichage de A.
cout<<A;// affiche le cercle A
(exemple d’affichage: Le centre du cercle est (2,3), son rayon est 7).
4. Donner une fonction membre permettant de déterminer la position d’un point par
rapport à un cercle. La fonction retourne 1 si le point est à l’intérieur du cercle, 0 s’il
est sur le cercle et -1 s’il est à l’extérieur du cercle.
5. Donner une fonction non membre qui retourne 1 si deux cercles se chevauchent et 0
sinon.
Exercice 3: (3 pts) Donner en justifiant le résultat d’exécution du programme suivant:
#include<iostream>
using namespace std;
int x = 4;
int h(int & x){x = 2*x; return x;}
int g(int f){return x;}
int & f(int &x){x+=::x; return x;}
main() {
int x = 1;
f(::x) = h(x);
cout<<f(x)<<endl; cout<<g(x)<<endl; cout<<h(x)<<endl;
}

Page 2/2

Vous aimerez peut-être aussi