{ return sqrt (abs () * abs () + ord () * ord () ) ;
}
} ;
Notez que, telle qu’elle a été définie, la classe point n’a pas donné naissance à un
fichier objet (puisque toutes ses fonctions membre sont en ligne). Il en va de même
ici pour pointb. Aussi, pour utiliser pointb au sein d’un programme, il suffira d’inclure
les fichiers contenant les déclarations de pointb. Naturellement, dans la pratique, il
en ira rarement ainsi ; en général, on devra fournir non seulement les déclarations de
la classe de base et de sa classe dérivée, mais également les fichiers objet
correspondant à leurs compilations respectives.
b. La définition précédente reste valable mais, néanmoins, comme les membres x et y de
point ont été déclarés protégés, ils sont accessibles aux fonctions membre de sa
classe dérivée ; aussi est-il possible, dans la définition de rho, de les utiliser
« directement ». Voici ce que pourrait devenir notre fonction rho (toujours ici « en
ligne ») :
float rho () // il faut que x et y soient
{ return sqrt (x * x + y * y) ; // déclarés "protected" dans point
}
c. Voici ce que pourrait être un constructeur à deux arguments (avec valeurs par
défaut) :
pointb (float c1=0.0, float c2=0.0)
{ initialise (c1, c2) ;
}
Là encore, si les membres x et y de point ont été déclarés «þprotégésþ», il est
possible d’écrire ainsi notre constructeur :
pointb (float c1=0.0, float c2=0.0)
{ x = c1 ; y = c2 ; // il faut que x et y soient
} // déclarés "protected" dans point
Notez qu’ici il n’est pas possible au constructeur de pointb d’appeler un quelconque
constructeur de point puisque ce dernier type ne possède pas de constructeur.
d. Un objet de type pointb peut utiliser n’importe laquelle des fonctions membre
publiques de point, c’est-à-dire initialise, affiche, abs et ord, ainsi que n’importe
laquelle des fonctions membre publiques de pointb, c’est-à-dire rho ou le constructeur
pointb. Notez d’ailleurs qu’ici le constructeur et initialise font double emploi : cela
provient d’une part de ce que point ne dispose pas de véritable constructeur, d’autre
part de ce que pointb n’a pas défini de membres donnée supplémentaires, de sorte
qu’il n’y a rien de plus à faire pour initialiser un objet de type pointb que pour
initialiser un objet de type point.
246
}
} ;
Notez que, telle qu’elle a été définie, la classe point n’a pas donné naissance à un
fichier objet (puisque toutes ses fonctions membre sont en ligne). Il en va de même
ici pour pointb. Aussi, pour utiliser pointb au sein d’un programme, il suffira d’inclure
les fichiers contenant les déclarations de pointb. Naturellement, dans la pratique, il
en ira rarement ainsi ; en général, on devra fournir non seulement les déclarations de
la classe de base et de sa classe dérivée, mais également les fichiers objet
correspondant à leurs compilations respectives.
b. La définition précédente reste valable mais, néanmoins, comme les membres x et y de
point ont été déclarés protégés, ils sont accessibles aux fonctions membre de sa
classe dérivée ; aussi est-il possible, dans la définition de rho, de les utiliser
« directement ». Voici ce que pourrait devenir notre fonction rho (toujours ici « en
ligne ») :
float rho () // il faut que x et y soient
{ return sqrt (x * x + y * y) ; // déclarés "protected" dans point
}
c. Voici ce que pourrait être un constructeur à deux arguments (avec valeurs par
défaut) :
pointb (float c1=0.0, float c2=0.0)
{ initialise (c1, c2) ;
}
Là encore, si les membres x et y de point ont été déclarés «þprotégésþ», il est
possible d’écrire ainsi notre constructeur :
pointb (float c1=0.0, float c2=0.0)
{ x = c1 ; y = c2 ; // il faut que x et y soient
} // déclarés "protected" dans point
Notez qu’ici il n’est pas possible au constructeur de pointb d’appeler un quelconque
constructeur de point puisque ce dernier type ne possède pas de constructeur.
d. Un objet de type pointb peut utiliser n’importe laquelle des fonctions membre
publiques de point, c’est-à-dire initialise, affiche, abs et ord, ainsi que n’importe
laquelle des fonctions membre publiques de pointb, c’est-à-dire rho ou le constructeur
pointb. Notez d’ailleurs qu’ici le constructeur et initialise font double emploi : cela
provient d’une part de ce que point ne dispose pas de véritable constructeur, d’autre
part de ce que pointb n’a pas défini de membres donnée supplémentaires, de sorte
qu’il n’y a rien de plus à faire pour initialiser un objet de type pointb que pour
initialiser un objet de type point.
246
