📄 tutcpp_heritage.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++ : L'H閞itage">
<title>L'Héritage</title>
</head>
<body text="#000000" bgcolor="#E2E2F1" link="#0000FF" vlink="#800080" alink="#FF0080">
<script language="JavaScript">
<!-- begin script
function VersionNavigateur(Netscape, Explorer) {
if ((navigator.appVersion.substring(0,3) >= Netscape && navigator.appName == 'Netscape') ||
(navigator.appVersion.substring(0,3) >= Explorer && navigator.appName.substring(0,9) == 'Microsoft'))
return true;
else return false;
}
// end script -->
</script>
<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>L'Héritage</font></font></font></b>
<blockquote><a href="TutCpp_Heritage.html#D閒inition et 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>
Définition et mise en oeuvre</font></font></font>
<br><a href="TutCpp_Heritage.html#Utilisation des membres de la classe de base"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Utilisation des membres de la classe de base</font></font></font>
<br><a href="TutCpp_Heritage.html#Red閒inition des fonctions membre et appel des constructeurs"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Redéfinition des fonctions membre et appel des constructeurs</font></font></font>
<br><a href="TutCpp_Heritage.html#Statuts de d閞ivation"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
"Statuts" de dérivation</font></font></font>
<br><a href="TutCpp_Heritage.html#Notion d'h閞itage : 閘argissement"><img SRC="../Images/Puce2.gif" NOSAVE BORDER=0 height=12 width=12></a><font face="Verdana"><font color="#1F3D61"><font size=-1>
Notion d'héritage : élargissement</font></font></font></blockquote>
</td>
</tr>
</table></center>
<br>
<center><table BORDER=0 COLS=1 WIDTH="80%" >
<tr>
<td><a NAME="D閒inition et mise en oeuvre"></a><b><font face="Verdana"><font color="#1A3251"><font size=+1>Définition
et mise en oeuvre</font></font></font></b>
<blockquote><b><font face="Verdana"><font color="#1A3251">Définition</font></font></b>
<br><font face="Verdana"><font color="#1A3251">Nous avons vu dans le premier
chapitre que l'<b>héritage</b> est en C++, et plus généralement
en P.O.O., un concept fondamental.</font></font>
<br><font face="Verdana"><font color="#1A3251">En effet, il permet de définir
une nouvelle classe "<i>fille</i>", qui héritera donc des caractéristiques
de la classe de base. Le terme "<i>caractéristiques"</i> inclut
en fait l'ensemble de la définition de cette classe mère.</font></font>
<br><font face="Verdana"><font color="#1A3251">D'un point de vue pratique,
il faut savoir qu'il n'est pas nécessaire à la classe fille
de connaître l'implémentation de la base : sa définition
suffit. Ceci sera mis en application. De plus, on peut hériter plusieurs
fois de la même classe, et une classe fille pourra également
servir de base pour une autre. Il est alors possible de décrire
un véritable "<b>arbre d'héritage</b>".</font></font>
<p><b><font face="Verdana"><font color="#1A3251">Mise en oeuvre</font></font></b>
<br><font face="Verdana"><font color="#1A3251">Mettre en oeuvre la technique
de l'héritage est assez en simple en C++. Le plus difficile reste
en fait la <b>conception</b>, qui nécessite un gros travail afin
de bien séparer les différentes classes.</font></font>
<p><font face="Verdana"><font color="#1A3251">Le premier exemple qui nous
permettra de réaliser notre premier héritage, propose de
définir une classe <b>PointCol</b> qui hérite de <b>Point</b>.
Sémantiquement parlant, <i>PointCol</i> est un <i>Point</i> auquel
on rajoute la gestion de la couleur. Nous obtenons alors :</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>PointCol
</b>:
</font><font color="#3333FF">public
</font><b><font color="#1A3251">Point</font></b></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">unsigned
char</font><font color="#1A3251"> byRed; </font><i><font color="#006600">//
La composante rouge</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">unsigned
char</font><font color="#1A3251"> byGreen; </font><i><font color="#006600">//
La composante verte</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">unsigned
char</font><font color="#1A3251"> byBlue; </font><i><font color="#006600">//
La composante bleue</font></i></tt>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
<br><tt><font color="#1A3251"> </font><i><font color="#006600">//
Coloration d'un point</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">void</font><font color="#1A3251">
Colore( </font><font color="#3333FF">unsigned char</font><font color="#1A3251">
R, </font><font color="#3333FF">unsigned char</font><font color="#1A3251">
G, </font><font color="#3333FF">unsigned char</font><font color="#1A3251">
B )</font></tt>
<br><tt><font color="#1A3251"> {</font></tt>
<br><tt><font color="#1A3251">
byRed = R;</font></tt>
<br><tt><font color="#1A3251">
byGreen = G;</font></tt>
<br><tt><font color="#1A3251">
byBlue = B;</font></tt>
<br><tt><font color="#1A3251"> }</font></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>
<font color="#1A3251"><font face="Verdana">Vous pouvez remarquer la notation
"</font><tt><font size=+1>: </font></tt></font><tt><font size=+1><font color="#3333FF">public
</font><font color="#1A3251"><b>Point</b></font></font></tt><font face="Verdana"><font color="#1A3251">".
Ceci signifie que notre point coloré hérite <b>publiquement</b>
de <i>Point</i>, c'est-à-dire que <b>tous les membres publics de
<i>Point</i> seront membres publics de <i>PointCol</i></b>.</font></font>
<br><font face="Verdana"><font color="#1A3251">En déclarant un objet
de type <i>PointCol</i>, il est ainsi possible d'accéder aux membres
publics de <i>PointCol</i>, donc, mais également de <i>Point</i>.
C'est une notion essentielle de la P.O.O. !</font></font>
<p><font face="Verdana"><font color="#1A3251">Pour mettre en application
notre exemple, nous allons utiliser la classe Point qui suit. Nous allons
pour la première fois faire celà dans les "règles
de l'art", en séparant physiquement la définition de l'implémentation
(un fichier "<b>.h</b>" et un fichier "<b>.cpp</b>").</font></font>
<p><font face="Verdana"><font color="#1A3251">Fichier <b>Point.h</b> :</font></font>
<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="#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"> Point(){}</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();</font></tt>
<br><tt><font color="#1A3251">};</font></tt></td>
</tr>
</table>
<p><font face="Verdana"><font color="#1A3251">Fichier <b>Point.cpp</b>
:</font></font>
<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>
<br><tt><font color="#3333FF">#include </font><font color="#1A3251">"Point.h"</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"> cout << </font><font color="#3333FF">this</font><font color="#1A3251">
<< "->" << x << ", " << y << endl;</font></tt>
<br><tt><font color="#1A3251">}</font></tt></td>
</tr>
</table>
<p><font color="#1A3251"><font face="Verdana">Vous pouvez maintenant rajouter
le fichier </font><tt><font size=+1>main.cpp</font></tt><font face="Verdana">
suivant :</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">"Point.h"</font></tt>
<p><tt><font color="#3333FF">class</font><font color="#1A3251"> <b>PointCol
</b>:
</font><font color="#3333FF">public
</font><b><font color="#1A3251">Point</font></b></tt>
<br><tt><font color="#1A3251">{</font></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">unsigned
char</font><font color="#1A3251"> byRed; </font><i><font color="#006600">//
La composante rouge</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">unsigned
char</font><font color="#1A3251"> byGreen; </font><i><font color="#006600">//
La composante verte</font></i></tt>
<br><tt><font color="#1A3251"> </font><font color="#3333FF">unsigned
char</font><font color="#1A3251"> byBlue; </font><i><font color="#006600">//
La composante bleue</font></i></tt>
<br><tt><font color="#3333FF">public</font><font color="#1A3251"> :</font></tt>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -