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

📄 tutcpp_surdefop.html

📁 ce fichier est un tutorial de c++.
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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++ : Surd閒inition d'op閞ateur">
   <title>Surd&eacute;finition d'op&eacute;rateur</title>
</head>
<body text="#000000" bgcolor="#E2E2F1" link="#0000FF" vlink="#800080" alink="#FF0080">
&nbsp;
<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>Surd&eacute;finition
d'op&eacute;rateur</font></font></font></b>
<blockquote><a href="TutCpp_SurdefOp.html#Comment 鏰 marche"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Comment &ccedil;a marche</font></font></font>
<br><a href="TutCpp_SurdefOp.html#Op閞ateurs simples"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Op&eacute;rateurs simples</font></font></font>
<br><a href="TutCpp_SurdefOp.html#Op閞ateur d'affectation"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Op&eacute;rateur d'affectation</font></font></font></blockquote>
</td>
</tr>
</table></center>

<br>&nbsp;
<br>&nbsp;
<center><table BORDER=0 COLS=1 WIDTH="80%" >
<tr>
<td><a NAME="Comment 鏰 marche"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Comment
&ccedil;a marche</font></font></font></b>
<blockquote><font color="#1A3251"><font face="Verdana">Nous avons commenc&eacute;
&agrave; r&eacute;aliser une classe <i>Point</i> qui permet la recopie
d'objet. Mais jusqu'&agrave; maintenant, nous avons &eacute;t&eacute; oblig&eacute;s
de cr&eacute;er des m&eacute;thodes telles que "</font><tt><font size=+1>Coincide</font></tt><font face="Verdana">"
qui v&eacute;rifie que deux points sont &eacute;gaux. Nous aurions pu &eacute;galement
r&eacute;aliser une fonction membre qui ajoute un point &agrave; un autre
:</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>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point();</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point(</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; Point(</font><font color="#3333FF">const</font><font color="#1A3251">
Point &amp; pt);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; void Ajoute(const
Point &amp; pt);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; ... </font><i><font color="#006600">//
D'&eacute;ventuelles autres m&eacute;thodes</font></i></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>

<p><font face="Verdana"><font color="#1A3251">Vous sentez alors qu'il serait
tr&egrave;s appr&eacute;ciable et plus naturel de pouvoir faire quelque
chose comme :</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; Point a(1,2);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point b(3,4);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point c;</font></tt>
<br><b><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; c = a + b;</font></tt></b></td>
</tr>
</table>

<p><font face="Verdana"><font color="#1A3251">C++ permet de r&eacute;aliser
une surd&eacute;finition des op&eacute;rateurs de base, comme "<b>+</b>",
"<b>-</b>", "<b>*</b>", "<b>/</b>", "<b>&amp;</b>", "<b>^</b>", etc. La
libert&eacute; &eacute;tant totale, vous pouvez faire r&eacute;ellement
ce que vous voulez, par exemple une soustraction pour l'op&eacute;rateur
d'addition et inversement. Mais il est clair qu'il est plus que conseill&eacute;
de respecter la signification de chacun des ces op&eacute;rateurs.</font></font>
<br>&nbsp;</blockquote>
<a NAME="Op閞ateurs simples"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Op&eacute;rateurs
simples</font></font></font></b>
<blockquote><font face="Verdana"><font color="#1A3251">Mettre en oeuvre
les op&eacute;rateurs simples est une op&eacute;ration assez rapide. Un
exemple est utile pour vous montrer comment on fait :</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>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point();</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point(</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; Point(</font><font color="#3333FF">const</font><font color="#1A3251">
Point &amp; pt);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point </font><font color="#3333FF">operator</font><font color="#1A3251">+(const
Point &amp; a)</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; {</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Point p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
p.x = a.x + x;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
p.y = a.y + y;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

</font><font color="#3333FF">return</font><font color="#1A3251"> p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; }</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; ... </font><i><font color="#006600">//
D'&eacute;ventuelles autres m&eacute;thodes</font></i></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>

<p><font color="#1A3251"><font face="Verdana">Des explications sont n&eacute;cessaires.
Tout d'abord, vous remarquerez le "</font><tt><font size=+1>const Point
&amp; a </font></tt><font face="Verdana">". Ceci signifie que l'on passe
un point en param&egrave;tre (l'autre point de l'addition est en fait la
classe appelante elle-m&ecirc;me). Ce dernier est transmis par r&eacute;f&eacute;rence,
afin d'&eacute;viter une recopie, lourde et moins rapide. Le "</font><tt><font size=+1>const</font></tt><font face="Verdana">"
est optionnel mais permet d'&eacute;viter de modifier les param&egrave;tres
et &eacute;galement autorise l'utilisation d'objets constants.</font></font>
<br><font color="#1A3251"><font face="Verdana">L'op&eacute;rateur rend
un <i>Point</i>. En fait, on rend en fin de m&eacute;thode le point qui
a &eacute;t&eacute; cr&eacute;&eacute; temporairement au d&eacute;part
et qui contient la somme des deux param&egrave;tres. Plus exactement, on
rend une copie de cet objet, le retour de la fonction &eacute;tant "</font><tt><font size=+1>Point</font></tt><font face="Verdana">",
et non "</font><tt><font size=+1>Point&amp;</font></tt><font face="Verdana">"
ou "</font><tt><font size=+1>Point*</font></tt><font face="Verdana">".
Ceci est normal. Il faut savoir que l'objet cr&eacute;&eacute; dans la
m&eacute;thode sera automatiquement d&eacute;truit &agrave; la fin de cette
derni&egrave;re. On ne peut bien &eacute;videmment pas rendre l'adresse
d'un objet qui sera d&eacute;truit ! D'o&ugrave; la n&eacute;cessit&eacute;
d'une recopie.</font></font>
<p><font face="Verdana"><font color="#1A3251">Ce que nous avons mis en
oeuvre pour l'op&eacute;rateur d'addition, nous pouvons en faire de m&ecirc;me
pour tous les autres op&eacute;rateurs "<i>simples</i>". Quelques exemples
:</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;int</font><font color="#1A3251"> x;</font></tt>
<br><tt><font color="#3333FF">&nbsp;int</font><font color="#1A3251"> y;</font></tt>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251">&nbsp;Point(){}</font></tt>
<br><tt><font color="#1A3251">&nbsp;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">&nbsp;Point </font><font color="#3333FF">operator</font><font color="#1A3251">
+(</font><font color="#3333FF">const</font><font color="#1A3251"> Point
&amp; a);</font></tt>
<br><tt><font color="#1A3251">&nbsp;Point </font><font color="#3333FF">operator</font><font color="#1A3251">
-(</font><font color="#3333FF">const</font><font color="#1A3251"> Point
&amp; a);</font></tt>
<br><tt><font color="#1A3251">&nbsp;</font><font color="#3333FF">int operator</font><font color="#1A3251">==(</font><font color="#3333FF">const</font><font color="#1A3251">
Point &amp; p);</font></tt>
<p><tt><font color="#1A3251">&nbsp;</font><font color="#3333FF">void</font><font color="#1A3251">
Affiche()</font></tt>
<br><tt><font color="#1A3251">&nbsp;{</font></tt>
<br><i><tt><font color="#006600">&nbsp; // "<b>this</b>" est un pointeur
sur la classe m&ecirc;me</font></tt></i>
<br><tt><font color="#1A3251">&nbsp; cout &lt;&lt; </font><font color="#3333FF">this</font><font color="#1A3251">
&lt;&lt; "->" &lt;&lt; x &lt;&lt; ", " &lt;&lt; y &lt;&lt; endl;</font></tt>
<br><tt><font color="#1A3251">&nbsp;}</font></tt>
<br><tt><font color="#1A3251">};</font></tt>
<p><tt><font color="#1A3251">Point Point::</font><font color="#3333FF">operator</font><font color="#1A3251">
+(</font><font color="#3333FF">const</font><font color="#1A3251"> Point
&amp; a)</font></tt>
<br><tt><font color="#1A3251">{ </font><i><font color="#006600">// <b>Addition</b>
de 2 points</font></i></tt>
<br><tt><font color="#1A3251">&nbsp;Point p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;p.x = x + a.x;</font></tt>
<br><tt><font color="#1A3251">&nbsp;p.y = y + a.y;</font></tt>
<p><tt><font color="#1A3251">&nbsp;</font><font color="#3333FF">return</font><font color="#1A3251">
p;</font></tt>
<br><tt><font color="#1A3251">}</font></tt>
<br><tt><font color="#1A3251">Point Point::</font><font color="#3333FF">operator</font><font color="#1A3251">
-(</font><font color="#3333FF">const</font><font color="#1A3251"> Point
&amp; a)</font></tt>
<br><tt><font color="#1A3251">{ </font><i><font color="#006600">// <b>Soustraction</b>
de 2 points</font></i></tt>
<br><tt><font color="#1A3251">&nbsp;Point p;</font></tt>
<br><tt><font color="#1A3251">&nbsp;p.x = x - a.x;</font></tt>
<br><tt><font color="#1A3251">&nbsp;p.y = y - a.y;</font></tt>
<p><tt><font color="#1A3251">&nbsp;</font><font color="#3333FF">return</font><font color="#1A3251">
p;</font></tt>
<br><tt><font color="#1A3251">}</font></tt>
<p><tt><font color="#3333FF">int</font><font color="#1A3251"> Point::</font><font color="#3333FF">operator</font><font color="#1A3251">==(</font><font color="#3333FF">const</font><font color="#1A3251">
Point &amp; p)</font></tt>
<br><tt><font color="#1A3251">{ </font><i><font color="#006600">// <b>Egalit&eacute;</b>
de 2 points (remplace "Coincide")</font></i></tt>
<br><tt><font color="#1A3251">&nbsp;</font><font color="#3333FF">if</font><font color="#1A3251">(
x==p.x &amp;&amp; y==p.y )</font></tt>
<br><tt><font color="#1A3251">&nbsp; </font><font color="#3333FF">return</font><font color="#1A3251">
1;</font></tt>

⌨️ 快捷键说明

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