📄 tutcpp_notionclasse.html
字号:
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> cout << </font><font color="#CC6600">"--Destructeur--"</font><font color="#1A3251">
<< endl;</font></tt>
<br><tt><font color="#1A3251">}</font></tt>
<br><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::Init(</font><font color="#3333FF">int</font><font color="#1A3251">
a)</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> Init(a,a);</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>
<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></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> Deplace(a,a);</font></tt>
<br><tt><font color="#1A3251">}</font></tt>
<br><tt><font color="#3333FF">void</font><font color="#1A3251"> Point::Affiche(char
*strMesg) </font><i><font color="#006600">// On ne rajoute pas le paramètre
par </font></i></tt>
<br><i><tt><font color="#006600">
// défaut dans l'implémentation !</font></tt></i>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> cout << strMesg
<< 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(1,2);</font></tt>
<br><tt><font color="#1A3251"> p.Deplace(4);</font></tt>
<br><tt><font color="#1A3251"> p.Affiche(</font><font color="#CC6600">"Le
point vaut "</font><font color="#1A3251">);</font></tt>
<br><tt><font color="#1A3251"> p.Init(10);</font></tt>
<br><tt><font color="#1A3251"> p.Affiche(</font><font color="#CC6600">"Le
point vaut desormais : "</font><font color="#1A3251">);</font></tt>
<p><tt><font color="#1A3251"> Point pp;</font></tt>
<br><tt><font color="#1A3251"> pp = p;</font></tt>
<br><tt><font color="#1A3251"> p.Deplace(12,13);</font></tt>
<br><tt><font color="#1A3251"> pp.Deplace(5);</font></tt>
<br><tt><font color="#1A3251"> p.Affiche(</font><font color="#CC6600">"Le
point p vaut "</font><font color="#1A3251">);</font></tt>
<br><tt><font color="#1A3251"> pp.Affiche(</font><font color="#CC6600">"Le
point pp vaut "</font><font color="#1A3251">);</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>
<p><font face="Verdana"><font color="#1A3251">Vous commencez à avoir
un programme un peu plus long...</font></font>
<br>
<p><b><font face="Verdana"><font color="#1A3251">Objets transmis en argument
d'une fonction membre</font></font></b>
<br><font color="#1A3251"><font face="Verdana">Nous pouvons maintenant
imaginer vouloir comparer deux points, afin de savoir s'ils sont égaux.
Pour cela, nous allons mettre en oeuvre une méthode "</font><tt><font size=+1>Coincide</font></tt><font face="Verdana">"
qui renvoie "1" lorsque les coordonnées des deux points sont égales
:</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"> 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="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251"> Point(</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">int</font><font color="#1A3251">
Coincide(Point p);</font></tt>
<br><tt><font color="#1A3251">};</font></tt>
<br><tt><font color="#3333FF">int</font><font color="#1A3251"> Point::Coincide(Point
p)</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">if</font><font color="#1A3251">(
(p.x==x) && (p.y==y) )</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">return</font><font color="#1A3251">
1;</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">else</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">return</font><font color="#1A3251">
0;</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>
<p><font face="Verdana"><font color="#1A3251">Cette partie de programme
fonctionne parfaitement, mais elle possède un inconvénient
majeur : la <b>passage de paramètre par valeur</b>, ce qui implique
une "duplication" de l'objet d'origine. Cela n'est bien sûr pas très
efficace.</font></font>
<br><font face="Verdana"><font color="#1A3251">La solution qui vous vient
à l'esprit dans un premier temps est probablement de passer par
un pointeur. Cette solution est possible, mais n'est pas la meilleure,
dans la mesure où nous savons fort bien que ces pointeurs sont toujours
sources d'erreurs (lorsqu'ils sont non initialisés, par exemple).</font></font>
<br><font face="Verdana"><font color="#1A3251">La vraie solution offerte
par le C++ est de passer par des références. Avec ce type
de passage de paramètre, aucune erreur est possible puisque l'objet
à passer doit déjà exister (être instancié).
En plus, les références offrent une simplification d'écriture,
par rapport aux pointeurs :</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"> 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="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251"> Point(</font><font color="#3333FF">int</font><font color="#1A3251">
a=0, </font><font color="#3333FF">int</font><font color="#1A3251"> b=0){
x=a; y=b; }</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">int</font><font color="#1A3251">
Coincide(Point &);</font></tt>
<br><tt><font color="#1A3251">};</font></tt>
<br><tt><font color="#3333FF">int</font><font color="#1A3251"> Point::Coincide(Point
& p)</font></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">if</font><font color="#1A3251">(
(p.x==x) && (p.y==y) )</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">return</font><font color="#1A3251">
1;</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">else</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">return</font><font color="#1A3251">
0;</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(2,0);</font></tt>
<br><tt><font color="#1A3251"> Point pp(2);</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">if</font><font color="#1A3251">(
p.Coincide(pp) )</font></tt>
<br><tt><font color="#1A3251">
cout << </font><font color="#CC6600">"p et pp coincident !"</font><font color="#1A3251">
<< endl;</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">if</font><font color="#1A3251">(
pp.Coincide(p) )</font></tt>
<br><tt><font color="#1A3251">
cout << </font><font color="#CC6600">"pp et p coincident !"</font><font color="#1A3251">
<< endl;</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>
</blockquote>
</td>
</tr>
</table></center>
<br>
<p><img SRC="../Images/TutorialCPP_Sepa.gif" ALT="S閜arateur" NOSAVE height=20 width=100%>
<center><table BORDER=0 CELLSPACING=0 CELLPADDING=0 COLS=3 WIDTH="95%" >
<tr>
<td><a href="TutCpp_BasesCpp.html"><img SRC="../Images/Previous.gif" ALT="Pr閏閐ent" NOSAVE BORDER=0 height=54 width=54 align=ABSCENTER></a><b><font face="Verdana"><font color="#407AC3"><font size=-1>
Bases du C++</font></font></font></b></td>
<td>
<center><a href="index.html"><img SRC="../Images/Sommaire.gif" ALT="Sommaire" NOSAVE BORDER=0 height=50 width=100></a></center>
</td>
<td>
<div align=right><b><font face="Verdana"><font color="#407AC3"><font size=-1>Construction,
destruction et ...</font></font></font></b><a href="TutCpp_ConstrDestInit.html"><img SRC="../Images/Next.gif" ALT="Suivant" NOSAVE BORDER=0 height=54 width=54 align=ABSCENTER></a></div>
</td>
</tr>
<tr>
<td><font face="Verdana"><font color="#407AC3"><font size=-2>Précédent</font></font></font></td>
<td>
<center><b><i><font face="Verdana"><font color="#407AC3"><font size=-2>Tutorial
C++ écrit par Gwenaël Brunet</font></font></font></i></b>
<br><font face="Verdana"><font color="#407AC3"><font size=-2>Vous pouvez
lui envoyer un <b><a href="mailto:brunet@traezh.enst-bretagne.fr">mail</a></b></font></font></font></center>
</td>
<td>
<div align=right><font face="Verdana"><font color="#407AC3"><font size=-2>Suivant</font></font></font></div>
</td>
</tr>
</table></center>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -