Vous êtes sur la page 1sur 30

C++

Somme de deux entiers


#include <iostream>
using namespace std;
int main()
{
int x1;
cout << "Saisir un entier : " << endl;
cin >>x1;
int x2, s;
cout << "Saisir un autre entier : " << endl;
cin >>x2;
s =x1 + x2;
cout << "La somme de " <<x1 << " et de " <<x2 << " vaut : " << s << endl;
return 0;
}
Types de base
Dclaration et initialisation de variables :
bool a = true; // variable boolenne
cout << boolalpha <<a; // pour que cela affiche
// true ou false
int i = 0; // entier
long j = 123456789; // entier long
float f = 3.1; // rel
// rel double prcision
double pi = 3.141592653589793238462643;
char c=a; // caractre
Initialisation la mode objet :
int i(0) ;
long j(123456789);
Tableau
int tab1[5] ; // Dclaration dun tableau de 5 entiers
// Dclaration et initialisation dun tableau de 3 entiers
int tab2 [] = {1,2,3} ; // Les indices commencent zro
int tab3[3][5];
char chaine[]= "Ceci est une chane de caractres";
// Attention, le dernier caractre dune chane est \0
char ch[]= "abc" ;
char ch[]= {a,b,c, \0};
chanes de caractres

Sur la classe string : mthodes appliques aux objets de la classe string


#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str ("chane test");
cout << " str contient " << str.length() << " caractres s.\n";
return 0;
}
Type rfrence (&)

int i = 5;
int & j = i; // j reoit i
// i et j dsignent le mme emplacement mmoire

int i = 5;
int & j = i; // j reoit i
j += 2; // i reoit i+2 (=7)
Pointeurs

2 oprateurs : new et delete


float *pf = new float;

int *pi = new int[20];

delete pf;
delete [] pi;
Pointeurs

Pointeurs de pointeur :
char c=w;
char *p1=&c; // p1 a pour valeur ladresse de c
// (*p1) est de type char
char **p2=&p1; // p2 a pour valeur ladresse de p1
// *p2 est de type char*
// **p2 est de type char
// 3 instructions quivalentes qui affiche w
cout << c ;
cout << *p1;
cout << **p2;
Fonctions
Passage des paramtres par valeur
#include <iostream>
void echange(int,int); // Dclaration (prototype) de la fonction
int main()
{

echange(n,p); // Appel de la fonction


}
void echange(int a, int b) // Dfinition de la fonction
{

}
les valeurs de n et p restent inchanges
Fonctions
Passage des paramtres par adresse
#include <iostream>
void echange(int*,int*); // Modification de la signature
int main()
{

echange(&n,&p);
}
void echange(int* a, int* b)
{

}

les valeurs de n et p ont t modifies


Fonctions
Passage des paramtres par rfrence
#include <iostream>
void echange(int&,int&);
int main()
{

echange(n,p); // attention, ici pas de &n et &p

}
void echange(int& a, int& b)
{

c=a; a=b; b=c;


}
a et n correspondent au mme emplacement mmoire, de mme pour b et p
les valeurs de n et p sont modifies
const

Constante symbolique : const int taille = 1000;


// Impossible de modifier taille dans la suite du programme const dfinit une expression constante = calcule
la compilation
Classes

Classe :
Regroupement de donnes (attributs ou champs) et de mthodes (fonctions membres)
Extension des structures (struct) avec diffrents niveaux de visibilit (protected, private et public)
En programmation oriente-objet pure : encapsulation des donnes et accs unique des donnes travers les
mthodes
Objet : instance de classe
Attributs et mthodes communs tous les objets dune classe
Valeurs des attributs propres chaque objet
Encapsulation
Caractrisation dun objet par les spcifications de ses mthodes : interface
Indpendance vis vis de limplmentation
Classes
Constructeurs
De mme nom que le nom de la classe
Dfinition de l'initialisation d'une instance de la classe
Appel implicitement toute cration d'instance de la classe
Mthode non type, pouvant tre surcharge
Destructeur
De mme nom que la classe mais prcd d'un tilde (~)
Dfinition de la dsinitialisation d'une instance de la classe
Appel implicitement toute disparition d'instance de la classe
Mthode non type et sans paramtre
Ne pouvant pas tre surcharg
Classes
class Exemple
{
int x;
public :
Exemple(int); // Dclaration du constructeur
~Exemple(); // Dclaration du destructeur
};
Exemple::Exemple (int i) // Dfinition du constructeur
{
x = i;
cout << "** Appel du constructeur - valeur de l'attribut = " << x << "\n";
}
Exemple::~Exemple() // Dfinition du destructeur
{ cout << "** Appel du destructeur - valeur de l'attribut = " << x << "\n";
}
Classes
Constructeur par recopie (copy constructor) :
Constructeur cr par dfaut mais pouvant tre redfini
Appel lors de linitialisation dun objet par recopie dun autre objet, lors du passage par valeur dun objet en
argument de fonction ou en retour dun objet comme retour de fonction
MaClasse c1;
MaClasse c2=c1; // Appel du constructeur par recopie

Possibilit de dfinir explicitement un constructeur par copie si ncessaire :


Un seul argument de type de la classe
Transmission de largument par rfrence

MaClasse(MaClasse &);
MaClasse(const MaClasse &) ;
Classes
class Exemple
{
int x;
public :
Exemple(int); // Dclaration du constructeur
~Exemple(); // Dclaration du destructeur
};
int main()
{ Exemple e(1); // Dclaration d'un objet Exemple
Exemple e2=e; // Initialisation dun objet par recopie
return 0;
}
Classes
class Exemple
{
int x;
public :
Exemple(int);
// Dclaration du constructeur par recopie
Exemple(const Exemple &);
~Exemple();
};

// Dfinition du constructeur par recopie


Exemple::Exemple (const Exemple & e)
{ cout << "** Appel du constructeur par recopie ";
x = e.x;
// Recopie champ champ
cout << " - valeur de l'attribut aprs recopie = " << x << endl;
}
Mthodes

Surcharge des mthodes


MaClasse(); Afficher();
MaClasse(int); Afficher(char* message);

Possibilit de dfinir des arguments par dfaut


MaClasse(int = 0); Afficher(char* = "" );

Possibilit de dfinir des mthodes en ligne


inline MaClasse::MaClasse() {corps court};
class MaClasse
{
MaClasse() {corps court};
};
Mthodes
Passage des paramtres objets
Transmission par valeur

bool Exemple::Egal(Exemple e)
{ return (x == e.x) ;
}
int main()
{ Exemple e1, e2;

if (e1.Egal(e2)==true)
// e2 est recopi dans un emplacement
// local Egal nomm e
// Appel du constructeur par recopie
}
Transmission par rfrence

bool Egal(const Exemple & e)


Mthodes
Mthode retournant un objet
Transmission par valeur

Exemple Exemple::Suivant()
{ Exemple e;
e.SetX(x+1);
return e; // Appel du constructeur par recopie
}
Transmission par rfrence

Exemple & Exemple::Suivant()


Auto-rfrence
Auto-rfrence : pointeur this
Pointeur sur lobjet (i.e. ladresse de lobjet) ayant appel
Uniquement utilisable au sein des mthodes de la classe

Exemple::AfficheAdresse()
{ cout << "Adresse : " << this ;
}
static

Applicable aux attributs et aux mthodes


Dfinition de proprit indpendante de tout objet de la classe proprit de la classe
class ClasseTestStatic
{
static int NbObjets; // Attribut statique
public:
// constructeur inline
ClasseTestStatic() {NbObjets++;};
// Affichage du membre statique inline
void AfficherNbObjets ()
{ cout << "Le nombre d'objets instances de la
classe est : " << NbObjets << endl;
};
static int GetNbObjets() {return NbObjets;};
};
static
// initialisation de membre statique
int ClasseTestStatic::NbObjets=0;
int main ()
{
cout << "Nombre d'objets de la classe :"
<< ClasseTestStatic ::GetNbObjets() << endl;

ClasseTestStatic a; a.AfficherNbObjets();
ClasseTestStatic b, c;
b.AfficherNbObjets(); c.AfficherNbObjets();
ClasseTestStatic d;
d.AfficherNbObjets(); a.AfficherNbObjets();
};
Surcharge doprateurs
Notions de mthode amie : friend
Fonction extrieure la classe ayant accs aux donnes prives de la classes
Plusieurs situations d amiti :
Une fonction indpendante, amie dune classe
Une mthode dune classe, amie dune autre classe
Une fonction amie de plusieurs classes
Toutes les mthodes dune classe amies dune autre classe

friend type_retour NomFonction (arguments) ;


// A dclarer dans la classe amie
Surcharge doprateurs
Possibilit en C++ de redfinir nimporte quel oprateur unaire ou binaire : =, ==, +, -, *, \, [], (), <<, >>, ++, -- ,
+=, -=, *=, /= , & etc.
class Exemple
{
bool operator== (const Exemple &);
};
Bool Exemple::operator==(const Exemple& e)
{
return(x==e.x) ;
}
Exemple e1, e2;

if (e1==e2)
Surcharge doprateurs
class Exemple
{
friend bool operator== (const Exemple &, const Exemple &); // fonction amie
};
bool operator==(const Exemple& e1, const Exemple& e2)
{
return(e1.x==e2.x) ;
}
Exemple e1, e2;

if (e1==e2)
Surcharge doprateurs
class Exemple
{ // Pas de fonction friend ici pour loprateur ==
}
// Fonction extrieure la classe
bool operator==(const Exemple& e1, const Exemple& e2)
{
return(e1.GetX()==e2.GetX()) ;
}
Main()
Exemple e1, e2;

if (e1==e2)
Surcharge doprateurs
class Exemple
{
const Exemple& operator= (const Exemple &);
}
const Exemple& Exemple::operator=(const Exemple& e)
{
if (this == &e) return * this ; // auto-assignation
x=e.x;
return *this;
}
Main()
Exemple e1(2),e2;

e2=e1;
Objet membre
Possibilit de crer une classe avec un membre de type objet dune classe
class point {
int abs, ord ;
public :
point(int,int);
};
class cercle
{
point centre; // membre instance de la classe point
int rayon;
public :
cercle (int, int, int);
};
Objet membre
#include "ObjetMembre.h"
point::point(int x=0, int y=0)
{
abs=x; ord=y;
cout << "Constr. point " << x << " " << y << endl;
}
cercle::cercle(int abs, int ord, int ray) : centre(abs,ord)
{
rayon=ray; cout << "Constr. cercle " << rayon << endl;
}
int main()
{
point p; cercle c (3,5,7);
}