Un premier exemple simple, où on définit une classe Point, dont les données sont privées (donc protégées) avec différentes méthodes géométriques.
#include <iostream> using namespace std; // classe de Point class Point { // donnees privees private: double x,y; // methodes public public: // position void position(double a,double b) { x=a; y=b; }; // translation et mise a l'echelle void translate(double dx,double dy) { x+=dx; y+=dy;}; void scale(double alpha) { x*=alpha; y*=alpha; }; // affichage void affiche() { cout<<"X="<<x<<" Y="<<y<<endl;}; }; // int main() { Point A; Point B; A.position(1,2); A.translate(1.0,0.0); A.affiche(); B.position(0,2); B.scale(2.0); B.affiche(); return 0; }
Pour pouvoir initialiser une classe lors de sa déclaration, on utilise des constructeurs, qui sont des méthodes ayant le nom générique de la classe.
#include <iostream> using namespace std; // classe de Point class Point { // donnees privees private: double x,y; // methodes public public: // constructeur Point() { x=0; y=0; }; Point(double a,double b) { x=a; y=b;}; Point(const Point &P) { x=P.x; y=P.y; }; // position void position(double a,double b) { x=a; y=b; }; // translation et mise a l'echelle void translate(double dx,double dy) { x+=dx; y+=dy; }; void scale(double alpha) { x*=alpha; y*=alpha; }; // affichage void affiche() { cout<<"X="<<x<<" Y="<<y<<endl;}; }; // int main() { Point A(1,2); Point B(A); A.translate(1.0,0.0); A.affiche(); B.scale(2.0); B.affiche(); return 0; }
On peut redéfinir tous les opérateurs du C pour les appliquer à une classe, et obtenir une notation plus simple.
Attention, cette opération génère des variables temporaires, qui dans certain cas peuvent rendre le code inefficace.
Avec le mécanisme friend (amis) on peut autoriser des fonctions à accéder aux données de la classe ( par exemple pour surcharger l'opérateur <<)
#include <iostream> using namespace std; // classe de Point class Point { // donnees privees private: double x,y; // methodes public public: // constructeur Point(double a=0,double b=0) { x=a; y=b;}; Point(const Point &P) { x=P.x; y=P.y; }; // position void position(double a,double b) { x=a; y=b;}; // surcharge d'operateur: P=P1+P2 Point operator+(const Point P) const { return Point(x+P.x,y+P.y); }; // P=P1*a Point operator*(double a) const { return Point(x*a,y*a); }; // affichage friend ostream& operator<<(ostream &s,const Point P); }; // fonction amie permettant l'acces aux donnees ostream& operator<<(ostream &s,const Point P) { return s<<"["<<P.x<<","<<P.y<<"]"; }; // int main() { Point A(1); // initialise x=1 y=0 Point B(1,2); Point C; C=A*2+B*4; cout<<"C="<<C<<endl; return 0; }