⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tutcpp_notionclasse.html

📁 ce fichier est un tutorial de c++.
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; y += b;</font></tt>
<br><tt><font color="#1A3251">}</font></tt>
<br><tt><font color="#3333FF">void</font><font color="#1A3251"> Point::Affiche()</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; x
&lt;&lt; </font><font color="#CC6600">", "</font><font color="#1A3251">
&lt;&lt; y &lt;&lt; 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">&nbsp;&nbsp;&nbsp;&nbsp; Point p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.Init(3,4);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.Affiche();</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.Deplace(4,6);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.Affiche();</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>

<p><font color="#1A3251"><font face="Verdana">Vous avez remarqu&eacute;
la pr&eacute;sence du "</font><b><tt><font size=+1>Point::</font></tt></b><font face="Verdana">"
qui signifie que la fonction est en faite une m&eacute;thode de la classe
<i>Point</i>.
Le reste est compl&egrave;tement identique. La seule diff&eacute;rence
entre ces 2 programmes vient du fait qu'on dit que les m&eacute;thodes
du premier programme (dont l'impl&eacute;mentation est faite dans la classe),
sont "<b>inline</b>". Ceci signifie que chaque appel &agrave; la m&eacute;thode
sera remplac&eacute; dans l'ex&eacute;cutable, par la m&eacute;thode en
elle-m&ecirc;me (un peu comme une <b>macro</b> en C). D'o&ugrave; un gain
de temps certain, mais une augmentation de la taille du fichier en sortie.</font></font>
<p><font color="#1A3251"><font face="Verdana">Mais la diff&eacute;rence
entre une structure et une classe n'a pas encore &eacute;t&eacute; vraiment
d&eacute;taill&eacute;e. En effet, vous pourriez tr&egrave;s bien compiler
le m&ecirc;me source en retirant le terme "</font><tt><font size=+1>public</font></tt><font face="Verdana">"
et en rempla&ccedil;ant "</font><tt><font size=+1>class</font></tt><font face="Verdana">"
par "</font><tt><font size=+1>struct</font></tt><font face="Verdana">".</font></font>
<br><font face="Verdana"><font color="#1A3251">En fait, l'int&eacute;r&ecirc;t
r&eacute;el du C++ tourne autour de cette notion importante d'encapsulation
de donn&eacute;es. Dans l'exemple de la classe <i>Point</i>, nous n'avons
pour l'instant sp&eacute;cifier aucune protection de donn&eacute;es ; vous
pouvez rajouter ces quelques lignes, sans erreur de compilation :</font></font>
<br>&nbsp;
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; ...</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.x = 25; </font><font color="#009900">//
Acc&egrave;s aux variables de la classe point</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.y = p.x + 10;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; </font><font color="#CC6600">"le
point est en "</font><font color="#1A3251"> &lt;&lt; p.x &lt;&lt; </font><font color="#CC6600">",
"</font><font color="#1A3251"> &lt;&lt; p.y &lt;&lt; endl;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; ...</font></tt></td>
</tr>
</table>

<p><font face="Verdana"><font color="#1A3251">L'encapsulation a pour objet
d'emp&ecirc;cher cela, afin de notamment limiter la n&eacute;cessit&eacute;
de compr&eacute;hension d'un objet pour l'utilisateur. La classe devient
alors une esp&egrave;ce de "<i>bo&icirc;te noire</i>" avec des interfaces
d'entr&eacute;e et de sortie. D'o&ugrave; la d&eacute;claration suivante
:</font></font>
<br>&nbsp;
<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">private </font><font color="#1A3251">:</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp; int</font><font color="#1A3251">
x;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#3333FF">int</font><font color="#1A3251">
y;</font></tt>
<p><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; </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">&nbsp;&nbsp;&nbsp;&nbsp; </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">&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#3333FF">void</font><font color="#1A3251">
Affiche();</font></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>

<p><font color="#1A3251"><font face="Verdana">Il est alors interdit d'acc&eacute;der
aux variables </font><tt><font size=+1>x</font></tt><font face="Verdana">
et </font><tt><font size=+1>y</font></tt><font face="Verdana"> qui sont
des membres "<b>priv&eacute;s</b>", en dehors de la classe <i>Point</i>
(elles restent accessibles dans les m&eacute;thodes de Point !).</font></font>
<p><font face="Verdana"><font color="#1A3251">Il est &eacute;galement possible
d'effectuer une affection de classe, comme pour une structure C. Ceci a
le m&ecirc;me effet puisque l'affectation a lieu sur les donn&eacute;es
membre :</font></font>
<br>&nbsp;
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#3333FF">#include</font><font color="#1A3251"> &lt;iostream.h></font></tt>
<p><i><tt><font color="#006600">... // d&eacute;claration de la classe
point</font></tt></i>
<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">&nbsp;&nbsp;&nbsp;&nbsp; Point p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.Init(3,4);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p.Affiche();</font></tt>
<p><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point p2;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p2 = p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; p2.Affiche();</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>
</blockquote>
<a NAME="Constructeur et Destructeur"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Constructeur
et Destructeur</font></font></font></b>
<blockquote><font face="Verdana"><font color="#1A3251">Au cours de l'&eacute;laboration
de cet exemple aussi simple que concret, vous vous &ecirc;tes peut-&ecirc;tre
dit qu'il serait int&eacute;ressant d'initialiser l'objet au moment de
sa d&eacute;claration. En effet,il faut de toute fa&ccedil;on g&eacute;n&eacute;ralement
utiliser tout de suite apr&egrave;s la m&eacute;thode "Init", alors pourquoi
ne pas faire d'une pierre deux coups ! Ceci est bien entendu possible en
C++ : il s'agit des constructeurs.</font></font>
<br><font face="Verdana"><font color="#1A3251">Voici comment nous pouvons
mettre en oeuvre un constructeur :</font></font>
<br>&nbsp;
<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><i><tt><font color="#006600">&nbsp;&nbsp;&nbsp;&nbsp; // Ici le "<b>private</b>"
est optionnel dans la mesure o&ugrave; tout</font></tt></i>
<br><i><tt><font color="#006600">&nbsp;&nbsp;&nbsp;&nbsp; // ce qui suit
la premi&egrave;re accolade est priv&eacute; par d&eacute;faut</font></tt></i>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp; int</font><font color="#1A3251">
x;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#3333FF">int</font><font color="#1A3251">
y;</font></tt>
<p><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point(int, int);
</font><i><font color="#006600">//
Constructeur de la classe point</font></i></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; </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">&nbsp;&nbsp;&nbsp;&nbsp; </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">&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#3333FF">void</font><font color="#1A3251">
Affiche();</font></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>

<p><font face="Verdana"><font color="#1A3251">Vous vous demandez s&ucirc;rement
comment d&eacute;clarer d&eacute;sormais, une variable de type <i>Point</i>
! Vous pensez peut-&ecirc;tre pouvoir faire ceci :</font></font>
<p><tt><font color="#1A3251"><font size=+1>Point p;</font></font></tt>
<p><font face="Verdana"><font color="#1A3251">En fait, non. A partir du
moment o&ugrave; un constructeur est d&eacute;fini, il doit pouvoir &ecirc;tre
appel&eacute; par d&eacute;faut pour la cr&eacute;ation de n'importe quel
objet. Dans notre cas il faut par cons&eacute;quent pr&eacute;ciser les
param&egrave;tres, par exemple :</font></font>
<p><tt><font color="#1A3251"><font size=+1>Point p(4,5);</font></font></tt>
<p><font face="Verdana"><font color="#1A3251">Pour laisser plus de libert&eacute;,
et permettre une d&eacute;claration sans initialisation, il faut pr&eacute;voir
un <b>constructeur par d&eacute;faut</b> :</font></font>
<br>&nbsp;
<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">&nbsp;&nbsp;&nbsp;&nbsp; int</font><font color="#1A3251">
x;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#3333FF">int</font><font color="#1A3251">
y;</font></tt>
<p><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point();&nbsp; </font><i><font color="#006600">//
Constructeur par d&eacute;faut</font></i></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point(int, int);&nbsp;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; </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">&nbsp;&nbsp;&nbsp;&nbsp; </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">&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#3333FF">void</font><font color="#1A3251">
Affiche();</font></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>

<p><font face="Verdana"><font color="#1A3251">Tout comme il existe un constructeur,
on peut sp&eacute;cifier un destructeur. Ce dernier est appel&eacute; lors
de la destruction de l'objet, explicite ou non.</font></font>
<br>&nbsp;
<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>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -