C++ : fonctions et opérateurs
Enseignement Informatique
LAL
Les arguments peuvent être passés à une fonction sous trois formes :
|
Passage par valeur :
Copie de a |
void fonction( int a )
{
a = 4; // a vaut 4
}
// Appel de la fonction
int b = 3;
fonction( b );
std::cout << "b = " << b << std::endl;
|
|
Passage par valeur :
b n'est pas changé par l'appel de fonction() |
void fonction( int a )
{
a = 4; // a vaut 4
}
// Appel de la fonction
int b = 3;
fonction( b );
std::cout << "b = " << b << std::endl;
|
|
Passage par adresse :
|
void fonction( int* pa )
{
*pa = 4; // a vaut 4
}
// Appel de la fonction
int b = 3;
fonction( &b );
std::cout << "b = " << b << std::endl;
|
|
Passage par adresse :
b est modifié par l'appel de fonction() |
void fonction( int* pa )
{
*pa = 4; // a vaut 4
}
// Appel de la fonction
int b = 3;
fonction( &b );
std::cout << "b = " << b << std::endl;
|
|
Passage par référence :
Pas de copie de a |
void fonction( int& a )
{
a = 4; // a vaut 4
}
// Appel de la fonction
int b = 3;
fonction( b );
std::cout << "b = " << b << std::endl;
|
|
Passage par référence :
b est modifié par l'appel de fonction() |
void fonction( int& a )
{
a = 4; // a vaut 4
}
// Appel de la fonction
int b = 3;
fonction( b );
std::cout << "b = " << b << std::endl;
|
vecteur.h
class Vecteur
{
protected:
int m_x, m_y;
public:
Vecteur() {m_x = m_y = 0;}
Vecteur(int x, int y) {m_x = x; m_y = y;}
void deplace (int x, int y);
void deplace (const Vecteur& v);
};
vecteur.cpp
void Vecteur::deplace (int x, int y) { m_x += x; m_y += y; } void Vecteur::deplace (const Vecteur& v) { m_x += v.m_x; m_y += v.m_y; }
main.cpp
int main()
{
Vecteur v1(3, 5), v2(6, 7);
v1.deplace(6,7);
v1.deplace(v2)
return (0);
}
Permet de redéfinir les opérateurs pour toute classe
vecteur.h
class Vecteur
{
protected:
int m_x, m_y;
public:
Vecteur() {m_x = m_y = 0;}
Vecteur(int x, int y) {m_x = x; m_y = y;}
bool operator== (const Vecteur& v);
Vecteur& operator= (const Vecteur& v);
Vecteur& operator+ (const Vecteur& v);
friend std::ostream& operator<< (std::ostream& os, const Vector& v);
};
vecteur.cpp
#include "vecteur.h"
bool Vecteur::operator== (const Vecteur& v)
{
return (m_x == v.m_x && m_y == v.m_y);
}
Vecteur& Vecteur::operator= (const Vecteur& v)
{
m_x = v.m_x; m_y = v.m_y;
return *this; // this contient l'adresse de l'objet lui-même
}
Vecteur& Vecteur::operator+ (const Vecteur& v)
{
Vecteur vv(m_x + v.m_x, m_y + v.m_y);
return vv;
}
vecteur.cpp (suite)
…
std::ostream& operator<< (std::ostream& os, const Vector& v)
{
os << "Abscisse : " << v.m_x << std::endl;
os << "Ordonnée : " << v.m_y << std::endl;
return (os);
}
main.cpp
#include "vecteur.h"
int main()
{
Vecteur v1(3, 5), v2(6, 8), v3, v4;
v3 = v1 + v2; // opérateur = et opérateur +
v4 = v3; // opérateur =
if (v3 == v4) // opérateur ==
std::cout << "Vecteurs identiques" << std::endl;
std::cout << v4; // Affichage à l'écran
ofstream f("fichier.txt");
f << v4; // Affichage dans un fichier
f.close();
return (0);
}
Opérateurs pouvant être redéfinis :
+ - * / % = !
+= -= *= /= %= ++ --
< > <= >= == != &&
|| & | ^ << >>
[] new delete
Questions ?