Académique Documents
Professionnel Documents
Culture Documents
Alors on trouve qu'on ne peux pas manipuler (lire et écrire) les attributs privés en dehors de
la classe par conséquence on peux surmonter le problème par l'addition de deux méthodes public
par attribut une pour lire (get) et l'autre pour écrire (set) comme suit:
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
void iniTialise(double xi,double yi) { x_=xi; y_=yi;}
void depLace(double dx,double dy) { x_=x_+dx; y_=y_+dy;}
void afficHe() {cout<<"(x,y)= "<<x_<<","<<y_<<")"<<endl};
double diStance(Point autrPoint) {
double dx=x_-autrPoint.x_; double dy=y_-autrPoint.y_;
return sqrt(dx*dx+dy*dy); }
double moDule() {
return sqrt(x_*x_+y_*y_); }
double getX() { return x_ ;} void setX(double sx) {x_ =sx;}
double getY() { return y_ ;} void setY(double sy) {y_ =sy;}
private: double x_ ,y_ ;
};
return 0; }
le constructeur:
c'est une méthode spéciale non typée qui porte le même nom que la classe; son rôle est de
déterminer la manière de création des objets et l'initialisation de ces attributs systématiquement.
une classe peut avoir plusieurs constructeurs (plusieurs façons de création d'objet).
si il y a pas de constructeur explicite le compilateur génère un par défaut sans effet.
l'utilisation des constructeur donne une souplesse à la classe et éviter la conception des méthodes
auxiliaires d'initialisation
plusieurs constructeurs peuvent être implémenter mais de paramètres différents
application: refaire la classe Point en introduisant cette notion.
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
Point( ) {x_=0; y_=0;}
Point(double c){x_=c; y_=0;}
Point(double a, double b) {x_=a; y_=b;}
P1.setX(5);
return 0; }
c'est la possibilité d'avoir plusieurs méthodes de même nom mais de paramètre différentes tandis
que l'opérateur this pointe les attributs de l'objet courant explicitement.
exemple:
compilation séparée:
c'est la séparation de la classe en deux fichiers distincts le premier (classe.h) porte les noms des
membres et le deuxième (classe.cpp) porte les corps des méthodes (code c++).
lors de l'exploitation de la classe on introduire uniquement le fichier entête (classe.h).
//***********************************Point.h***************************
#ifndef POINT_H
#define POINT_H
class Point
{
public:
Point();
Point(double );
Point(double,double);
double getX(); double getY();
void setX(double); void setY(double);
void depLace(double,double);
void afficHe(Point);
double diStance(Point autrPoint);
double diStance(Point p1, Point p2);
double moDule();
virtual ~Point();
protected:
private:
double x,y;
};
#endif // POINT_H
//***********************************Point.cpp****************************
#include <iostream>
#include <cmath>
#include "point.h"
Point::Point(){ x=0;y=0; }
Point::Point(double a){ x=a;y=0; }
Point::Point(double a,double b){ x=a;y=b; }
double Point::getX(){ return x;}
double Point::getY(){ return y;}
void Point::setX(double a){x=a;}
void Point::setY(double b){x=b;}
void Point::depLace(double dx,double dy){ x=x+dx; y=y+dy;}
void Point::afficHe(Point p1)
{
cout<<"p1(x,y)= ("<<p1.x<<","<<p1.y<<")"<<endl;
}
double Point::diStance(Point autrPoint)
{
double dx=this->x-autrPoint.x; // int dx=this->x-autrPoint.x;
double dy=this->y-autrPoint.y; // int dy=this->y-autrPoint.y;
return sqrt(dx*dx+dy*dy);
}
double Point::diStance(Point p1, Point p2)
{
double dx=p2.x-p1.x;
double dy=p2.y-p1.y;
return sqrt(dx*dx+dy*dy);
}
double Point::moDule()
{
return sqrt(x*x+y*y);
}
Point::~Point(){ }
int main() {
Point P1() , P2(2.5) , P3(1.5,3.5); //création et initialisation de trois objets différemment.
cout<<"x du point P1 est: " <<P1.getX()<<endl;
P1.setX(5);
return 0; }