Yo!
Je voudrais savoir si c'est problématique d'ajouter à une classe virtuelle pure
un attribut privé, alors que cette classe n'en possedait pas avant?
Quelles sont les précautions à prendre avec une telle classe?
Merci
Yo!
Je voudrais savoir si c'est problématique d'ajouter à une classe virtuelle pure
un attribut privé, alors que cette classe n'en possedait pas avant?
Quelles sont les précautions à prendre avec une telle classe?
Merci
N’étant pas experte en C++, je penserais que si une classe est virtuelle tu peux bien ajouter des attributs privé cela ne changera grand chose. Apres je ne saisis pas pourquoi rajouter un attribut privé à un classe virtuelle, mais cela doit venir du fait que je suis trop imprégnée des interfaces java.
Par classe virtuelle pure, tu entends bien classe ou toutes les méthodes sont déclarée virtuelle pure ?
Dans ce cas, y mettre un attribut privée me parait peu utile, étant donnée qu'il ne pourra être accédé par personne, ou alors quelque chose m'échappe...
Ca peut avoir du sens.
Tu peux très bien définir qu'un cycle a deux roues, même si tu n'as pas encore défini s'il va avancer par propulsion humaine, thermique, ou électrique, et qu'il n'est donc pas encore constructible.
Dans ce cas, la propriété "a deux roues" est publique, pas privée.
1 / Une classe virtuelle pure n'a pas d'accesseurs qui ne sont pas eux-même virtuels purs (par définition).
2/ Sans accesseur concrets, il est impossible d'accéder aux propriétés privées d'un objet en C++ à partir d'une classe dérivée.
3/ La conclusion s'impose d'elle même : la seule chose que va faire la propriété privée, c'est prendre de la place en mémoire. Personne ne peut y avoir accès - comment, dès lors, lui trouver une utilité quelconque ?
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
Effectivement; j'avais un peu oublié le côté privé...
Salut,
D'abord, il faut faire attention aux termes utilisés...
On parle de classe abstraite lorsqu'une classe n'est pas instanciable (du fait de la présence de fonctions virtuelles pures) et de fonctions virtuelles pures lorsqu'une fonction est déclarée virtuelle mais que l'on n'est pas en mesure de fournir un comportement correct par manque de données.
les fonctions virtuelles pures sont repérables au fait que leur déclaration est suivie d'un = 0 avant le ";" final.
Rien ne t'empêche de déclarer (et de défininir !! ) une fonction qui n'est pas virtuelle ou qui est virtuelle (non pure ! ) dans une classe abstraite si... tu dispose de suffisemment d'informations pour lui donner un comportement cohérent
A partir de là, il n'est pas du tout impensable de donner un membre privé à une classe abstraite pour autant que... l'une ou l'autre des fonctions non virtuelles pures l'utilise! (si aucune fonction non virutelle pure ne l'utilise, cela ne sert effectivement à rien)
Dans l'exemple de cycle que tu présente, nous pourrions dire que cycle hérite de... véhicule, qui dispose d'une fonction virtuelle pure nombreRoue, définie dans cycle, mais que cycle reste une classe abstraite parce que d'autres fonctions virtuelles pures subsistent dans cette classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class Vehicle { public: virtual Vehicle(); /* une série de fonctions virtuelles pures qui font de Vehicle * une classe abstraite */ virtual energyType energy() const = 0; virtual int weelsCount() const = 0; /* ... */ }; /* un bicycle a deux roues, mais un type d'énergie inconnu */ class Bicycle { public: virtual int weelsCount() const; /* Bicycle reste une classe abstraite parce que energy() est encore * virtuelle pure ;) */ private: int weelsCount_; };
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
J'ajouterai qu'il est possible de déclarer une méthode virtuelle comme étant pure (= 0) tout en fournissant une implémentation, utilisable une fois qu'on aura rendu l'instanciation possible dans une classe dérivée.
Pervers, certes..
Partager