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

📄 tutcpp_constrdestinit.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.5 [fr] (WinNT; I) [Netscape]">
   <meta name="Description" content="Tutorial C++ : Base">
   <title>Base</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>Construction,
destruction et initialisation d'objets</font></font></font></b>
<blockquote><a href="TutCpp_ConstrDestInit.html#Constructeur par d閒aut/initialisant"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Constructeur par d&eacute;faut / "initialisant"</font></font></font>
<br><a href="TutCpp_ConstrDestInit.html#Constructeur par recopie"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Constructeur par recopie</font></font></font>
<br><a href="TutCpp_ConstrDestInit.html#Mise en oeuvre"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Mise en oeuvre</font></font></font></blockquote>
</td>
</tr>
</table></center>

<br>&nbsp;
<br>&nbsp;
<center><table BORDER=0 COLS=1 WIDTH="80%" >
<tr>
<td><a NAME="Constructeur par d閒aut/initialisant"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Constructeur
par d&eacute;faut/initialisant</font></font></font></b>
<blockquote><b><font face="Verdana"><font color="#1A3251">Constructeurs
simples</font></font></b>
<br><font face="Verdana"><font color="#1A3251">Nous avons aborder pr&eacute;c&eacute;demment
la possibilit&eacute; d'initialiser un objet lors de sa construction, ou
encore de proposer un constructeur par d&eacute;faut. Nous allons dans
ce chapitre g&eacute;n&eacute;raliser le principe tout en l'approfondissant.</font></font>
<p><font face="Verdana"><font color="#1A3251">Tout d'abord, il faut bien
comprendre l'int&eacute;r&ecirc;t de la chose : un constructeur initialisant
permet comme son nom l'indique d'initialiser les donn&eacute;es membre,
que ces valeurs soient entr&eacute;es par l'utilisateur, ou bien qu'elles
soient par d&eacute;faut. Les destructeur quant &agrave; lui est appel&eacute;
&agrave; la fin de la vie de l'objet, de fa&ccedil;on automatique ou non
(si l'objet est un pointeur).</font></font>
<br><font face="Verdana"><font color="#1A3251">Ceci prend toute son importance
dans le cas d'un objet qui contient lui-m&ecirc;me des donn&eacute;es de
type pointeur. Prenons par exemple une classe <b>Vecteur</b> qui g&egrave;re
un vecteur m&eacute;moire d'entiers. Nous allons essayer d'int&eacute;grer
dans un premier temps :</font></font>
<ul>
<li>
<i><font face="Verdana"><font color="#1A3251">un <b>constructeur initialisant</b>,
connaissant la <b>taille</b> du vecteur,</font></font></i></li>

<li>
<i><font face="Verdana"><font color="#1A3251">un <b>destructeur</b>,</font></font></i></li>

<li>
<i><font face="Verdana"><font color="#1A3251">une m&eacute;thode de <b>lecture</b>
d'une valeur dans le vecteur,</font></font></i></li>

<li>
<i><font face="Verdana"><font color="#1A3251">---------------- d'<b>&eacute;criture</b>
---------------------------------,</font></font></i></li>

<li>
<i><font face="Verdana"><font color="#1A3251">une m&eacute;thode qui renvoie
la <b>taille </b>du vecteur.</font></font></i></li>
</ul>
<font face="Verdana"><font color="#1A3251">Dans la mesure o&ugrave; vous
devriez &ecirc;tre capable de r&eacute;aliser cette classe, essayez de
la concevoir tout seul dans un premier temps...</font></font>
<div align=right><font face="Verdana"><font color="#1A3251"><font size=-1>>
<a href="#Solution">Aller
&agrave; la solution</a> &lt;</font></font></font></div>

<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<p><a NAME="Solution"></a><b>Solution</b>
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="85%" BGCOLOR="#DBDBEE" >
<tr>
<td><tt><font color="#3333FF">#include</font> &lt;iostream.h></tt>
<p><tt><font color="#3333FF">class</font> Vecteur</tt>
<br><tt>{</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">int</font> *pVecteur;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">int</font> nTaille;</tt>
<p><tt><font color="#3333FF">public</font> :</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; Vecteur(<font color="#3333FF">int</font>);
<i><font color="#006600">//
Construction connaissant la taille du vecteur</font></i></tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; ~Vecteur();&nbsp;&nbsp; <i><font color="#006600">//
Destruction</font></i></tt>
<p><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">int</font> GetAt(<font color="#3333FF">int</font>
ind)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i><font color="#006600">// Lecture
de valeur en "inline"</font></i></tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; {</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">if</font>(
ind>=0 &amp;&amp; ind&lt;nTaille )</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<font color="#3333FF">return</font> pVecteur[ind];</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">else</font></tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i><font color="#006600">//
comportement ind&eacute;fini, pour l'instant retour 0;</font></i></tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<font color="#3333FF">return</font> 0;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; }</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">void</font> SetAt(<font color="#3333FF">int</font>
ind, <font color="#3333FF">int</font> val) <i><font color="#006600">//
Ecriture de valeur</font></i></tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; {</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">if</font>(
ind>=0 &amp;&amp; ind&lt;nTaille )</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pVecteur[ind]=val;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; }</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">int</font> Size(){
<font color="#3333FF">return</font>
nTaille; }</tt>
<br><tt>};</tt>
<p><tt>Vecteur::Vecteur(<font color="#3333FF">int</font> Taille)</tt>
<br><tt>{</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <i><font color="#006600">// Aucun contr&ocirc;le
de taille n'est fait pour simplifier</font></i></tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; nTaille = Taille;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; pVecteur = <font color="#3333FF">new</font>
int[nTaille];</tt>
<br><tt>}</tt>
<br><tt>Vecteur::~Vecteur()</tt>
<br><tt>{</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">delete</font> pVecteur;</tt>
<br><tt>}</tt>
<p><tt><font color="#3333FF">void</font> main()</tt>
<br><tt>{</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; Vecteur *v;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; v = <font color="#3333FF">new</font> Vecteur(10);</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">for</font>( <font color="#3333FF">int</font>
i=0; i&lt;v->Size(); i++ )</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v->SetAt(i,
i*i-i);</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">for</font>( i=0;
i&lt;v->Size(); i++ )</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt;
v->GetAt(i) &lt;&lt; <font color="#CC6600">" "</font>;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl;</tt>
<br><tt>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3333FF">delete</font> v;</tt>
<br><tt>}</tt></td>
</tr>
</table>

<p><b><font face="Verdana"><font color="#1A3251">Le pourquoi du comment</font></font></b>
<br><font color="#1A3251"><font face="Verdana">Il faut bien comprendre
le r&ocirc;le du destructeur. Un destructeur de classe est appel&eacute;
&agrave; la destruction de l'objet, c'est-&agrave;-dire &agrave; la fin
du bloc dans lequel il a &eacute;t&eacute; instanci&eacute;, ou bien &agrave;
un endroit sp&eacute;cifi&eacute; par l'utilisateur, si l'objet a &eacute;t&eacute;
cr&eacute;&eacute; dynamiquement (appel &agrave; un </font><tt><font size=+1>delete</font></tt><font face="Verdana">
&agrave; ce moment l&agrave;).</font></font>
<br><font face="Verdana"><font color="#1A3251">Mais le destructeur d&eacute;truit
*seulement* l'objet, soit la m&eacute;moire allou&eacute;e pour les membres.
En outre, il ne peut pas savoir que la classe est compos&eacute;e de pointeurs
et qu'une allocation m&eacute;moire a &eacute;t&eacute; effectu&eacute;e
vers tel segment m&eacute;moire. C'est au cr&eacute;ateur de la classe
qu'il advient de sp&eacute;cifier la d&eacute;sallocation des pointeurs
(tout comme l'allcoation d'ailleurs).</font></font><font face="Verdana"><font color="#1A3251"></font></font>
<p><font face="Verdana"><font color="#1A3251">Quant au <i>main</i>, il
est vraiment tr&egrave;s simple. Il se propose juste de cr&eacute;er un
objet de type <i>Vecteur</i>, dynamiquement, de le remplir avec diff&eacute;rentes
valeurs, puis de les afficher.</font></font>
<br><font face="Verdana"><font color="#1A3251">Pour comprendre un peu le
fonctionnement de la classe, essayez d'autres op&eacute;rations telles
que diff&eacute;rentes cr&eacute;ations d'objets statiquement et dynamiquement.</font></font></blockquote>
<a NAME="Constructeur par recopie"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Constructeur
par recopie</font></font></font></b>
<blockquote><font face="Verdana"><font color="#1A3251">Reprenons notre
classe <i>Point</i>. Nous avons donc d&eacute;j&agrave; deux constructeurs,
&agrave; savoir un par d&eacute;faut et un autre par initialisation des
coordonn&eacute;es.</font></font>
<br><font face="Verdana"><font color="#1A3251">Il appara&icirc;t qu'il
pourrait &ecirc;tre int&eacute;ressant de r&eacute;aliser un constructeur
&agrave; partir d'un point !</font></font>
<br><font face="Verdana"><font color="#1A3251">C++ permet cette fonctionnalit&eacute;
par d&eacute;faut, en voici l'exemple :</font></font>
<br>&nbsp;
<table BORDER=0 CELLSPACING=0 CELLPADDING=3 COLS=1 WIDTH="80%" BGCOLOR="#DBDBEE" >
<tr>
<td><i><tt><font color="#006600">// D&eacute;finition de la classe Point</font></tt></i>
<br><tt><font color="#1A3251">...</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point pt(1,2);</font></tt>
<br><tt><font color="#1A3251">&nbsp;&nbsp;&nbsp;&nbsp; Point pt2(pt); </font><i><font color="#006600">//
Construction par recopie de Point</font></i></tt>
<br><tt><font color="#1A3251">...</font></tt></td>
</tr>
</table>
<font face="Verdana"><font color="#1A3251">Il est possible de red&eacute;finir
ce constructeur. Bien entendu, il faut qu'il est un int&eacute;r&ecirc;t
quelconque.</font></font>

⌨️ 快捷键说明

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