📄 tutcpp_notionclasse.html
字号:
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Gwena雔 Brunet">
<meta name="GENERATOR" content="Mozilla/4.7 [fr] (WinNT; I) [Netscape]">
<meta name="Description" content="Tutorial C++ : Notion de classe">
<title>La notion de classe</title>
</head>
<body text="#000000" bgcolor="#E2E2F1" link="#0000FF" vlink="#800080" alink="#FF0080">
<center><table BORDER=0 CELLSPACING=0 CELLPADDING=0 COLS=2 WIDTH="95%" BGCOLOR="#F7F2F6" >
<tr>
<td WIDTH="100"><img SRC="../Images/Tutorial_LogoMini.jpg" NOSAVE height=120 width=120 align=ABSCENTER></td>
<td><b><font face="Verdana"><font color="#407AC3"><font size=+3>La notion
de Classe</font></font></font></b>
<blockquote><a href="#Ecriture d'une premi鑢e classe"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Ecriture d'une première classe</font></font></font>
<br><a href="#Utilisation de la classe"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Utilisation de la classe</font></font></font>
<br><a href="#Constructeur et Destructeur"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Constructeur et destructeur</font></font></font>
<br><a href="#Les Fonctions membre"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Les fonctions membre</font></font></font></blockquote>
</td>
</tr>
</table></center>
<br>
<br>
<center><table BORDER=0 COLS=1 WIDTH="80%" >
<tr>
<td><font face="Verdana"><font color="#1A3251">Nous allons enfin parler,
dans ce chapitre, de <b>Programmation Orientée Objet</b>. Nous allons
commencer par comprendre le mécanisme des <b>classes</b>.</font></font>
<br>
<p><a NAME="Ecriture d'une premi鑢e classe"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Ecriture
d'une première classe</font></font></font></b>
<blockquote><font face="Verdana"><font color="#1A3251">Une classe est en
quelque sorte une structure complexe qui permet <b>l'encapsulation de données</b>.</font></font>
<br><font face="Verdana"><font color="#1A3251">Une classe est composée
de données et de méthodes. Lorsque l'encapsulation des données
est parfaite, seules les (certaines) méthodes sont accessibles.
Ceci évite en principe à l'utilisateur de la classe, de se
soucier de son fonctionnement et de faire des erreurs en changeant directement
la valeur de certaines données.</font></font>
<br><font face="Verdana"><font color="#1A3251">Prenons un exemple concret
et simple : l'écriture d'une classe <b>Point</b>. Cet exemple va
nous suivre tout au long de ce chapitre.</font></font>
<p><font face="Verdana"><font color="#1A3251">En <b>C</b>, nous aurions
fait une structure comme suit :</font></font>
<br>
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#3333FF">struct</font><font color="#1A3251"> Point</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
x; </font><i><font color="#006600">// Abscisse
du point</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
y; </font><i><font color="#006600">// Ordonnée</font></i></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>
<p><font face="Verdana"><font color="#1A3251">La déclaration précédente
fonctionne parfaitement en C++. Mais nous aimerions rajouter des fonctions
qui sont fortement liées à ces données, comme l'affichage
d'un point, son déplacement, etc. Voici une solution en <b>C++</b>
:</font></font>
<br>
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#3333FF">class</font><font color="#1A3251"> <b>Point</b></font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
x;</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
y;</font></tt>
<p><tt><font color="#1A3251"> </font><font color="#3333FF">void
</font><font color="#1A3251">Init(</font><font color="#3333FF">int</font><font color="#1A3251">,
</font><font color="#3333FF">int</font><font color="#1A3251">);
</font><i><font color="#006600">//
Initialisation d'un point</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Deplace(</font><font color="#3333FF">int</font><font color="#1A3251">,
</font><font color="#3333FF">int</font><font color="#1A3251">);
</font><i><font color="#006600">//
Déplacement du point</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Affiche(); </font><i><font color="#006600">//
Affichage du point</font></i></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>
<p><font face="Verdana"><font color="#1A3251">Vous remarquerez tout de
suite plusieurs éléments :</font></font>
<blockquote>
<li>
<b><tt><font color="#3333FF"><font size=+1>class</font></font></tt></b><font color="#1A3251"><font face="Verdana">
: le "</font><tt><font size=+1>struct</font></tt><font face="Verdana">"
a été remplacé, même si dans cet exemple précis,
il aurait pu être conservé. Mais nous ne rentrerons pas dans
les détails.</font></font></li>
<li>
<b><tt><font color="#3333FF"><font size=+1>public</font></font></tt></b><font face="Verdana"><font color="#1A3251">
: le terme public signifie que tous les membres qui suivent (données
comme méthodes) sont accessibles de l'extérieur de la classe.
Nous verrons les différentes possibilités plus tard.</font></font></li>
<li>
<font color="#1A3251"><font face="Verdana">L'ajout des fonctions (ou plutôt
méthodes puisqu'elles font partie de la classe) "</font><b><tt><font size=+1>Init</font></tt></b><font face="Verdana">",
"</font><b><tt><font size=+1>Deplace</font></tt></b><font face="Verdana">"
et "</font><b><tt><font size=+1>Affiche</font></tt></b><font face="Verdana">".
Elles permettent respectivement d'initialiser un point, de le déplacer
(addition de coordonnées) et de l'afficher (contenu des variables
</font><tt><font size=+1>x</font></tt><font face="Verdana">
et </font><tt><font size=+1>y</font></tt><font face="Verdana">).</font></font></li>
</blockquote>
</blockquote>
<p><br><a NAME="Utilisation de la classe"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Utilisation
de la classe</font></font></font></b>
<blockquote><font face="Verdana"><font color="#1A3251">Voici maintenant
un programme complet pour mettre en application tout ceci :</font></font>
<br>
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#3333FF">#include</font><font color="#1A3251"> <iostream.h></font></tt>
<p><tt><font color="#3333FF">class</font><font color="#1A3251"> <b>Point</b></font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#3333FF"> int</font><font color="#1A3251">
x;</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
y;</font></tt>
<p><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Init(</font><font color="#3333FF">int</font><font color="#1A3251"> a, </font><font color="#3333FF">int</font><font color="#1A3251">
b){ x = a; y = b; }</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Deplace(</font><font color="#3333FF">int</font><font color="#1A3251"> a,
</font><font color="#3333FF">int</font><font color="#1A3251">
b){ x += a; y += b; }</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Affiche(){ cout << x << </font><font color="#CC6600">", "</font><font color="#1A3251">
<< y << endl; }</font></tt>
<br><tt><font color="#1A3251">};</font></tt>
<p><tt><font color="#3333FF">void</font><font color="#1A3251"> main()</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> Point p;</font></tt>
<br><tt><font color="#1A3251"> p.Init(3,4);</font></tt>
<br><tt><font color="#1A3251"> p.Affiche();</font></tt>
<br><tt><font color="#1A3251"> p.Deplace(4,6);</font></tt>
<br><tt><font color="#1A3251"> p.Affiche();</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>
<p><font face="Verdana"><font color="#1A3251">Les méthodes de la
classe <i>Point</i> sont implémentées dans la classe même.
Ceci fonctionne très bien, mais devient bien entendu assez lourd
lorsque le code est plus long. C'est pourquoi il vaut mieux placer la déclaration
seulement, au sein de la classe. Notre code devient alors :</font></font>
<br>
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#3333FF">#include</font><font color="#1A3251"> <iostream.h></font></tt>
<p><tt><font color="#3333FF">class</font><font color="#1A3251"> <b>Point</b></font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#3333FF"> int</font><font color="#1A3251">
x;</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
y;</font></tt>
<p><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Init(</font><font color="#3333FF">int</font><font color="#1A3251"> a, </font><font color="#3333FF">int</font><font color="#1A3251">
b);</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Deplace(</font><font color="#3333FF">int</font><font color="#1A3251"> a,
</font><font color="#3333FF">int</font><font color="#1A3251">
b);</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Affiche();</font></tt>
<br><tt><font color="#1A3251">};</font></tt>
<p><tt><font color="#3333FF">void</font><font color="#1A3251"> Point::Init(</font><font color="#3333FF">int</font><font color="#1A3251">
a, </font><font color="#3333FF">int</font><font color="#1A3251"> b)</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> x = a;</font></tt>
<br><tt><font color="#1A3251"> y = b;</font></tt>
<br><tt><font color="#1A3251">}</font></tt>
<br><tt><font color="#3333FF">void</font><font color="#1A3251"> Point::Deplace(</font><font color="#3333FF">int</font><font color="#1A3251">
a, </font><font color="#3333FF">int</font><font color="#1A3251"> b)</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> x += a;</font></tt>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -