classes dérivées et pointeurs - C++ - Programmation
Marsh Posté le 27-03-2008 à 15:06:04
oui, puisque qu'un B est un A.
(ton phrasé n'est pas clair, mais le code est OK (modulo les )
Marsh Posté le 28-03-2008 à 10:04:07
Et par contre qu'est ce qui n'est pas possible de faire?
ça déjà:
B unB
unB = new A()
d'autres?
Marsh Posté le 28-03-2008 à 11:03:30
ReplyMarsh Posté le 28-03-2008 à 13:04:01
Je ne sais pas, je n'ai pas essayé, et je ne peut pas essayer pour le moment.
Mais il me semble avoir vu en cour que c'etait impossible. Je me trompe?
Marsh Posté le 28-03-2008 à 14:48:04
Il y a une raison pour que ce soit impossible? (indice: le post de Taz donne un très bon indice pour répondre à cette question)
Marsh Posté le 28-03-2008 à 18:29:20
Bah alors j'ai mal noter un truc en cours.
Dans mon exemple de cours j'ai ça:
Code :
|
Et j'ai marquer que les instructions suivantes sont fausses car il y plus de données dans A3 que dans A1:
Code :
|
Marsh Posté le 28-03-2008 à 18:38:08
nebneblan a écrit : Bah alors j'ai mal noter un truc en cours. |
J'ai posé une question, je n'ai pas effectué de jugement, et je t'ai donné une piste pour te lancer dans le processus de réponse. Réfléchis un peu et reviens avec la réponse que tu penses correcte et pourquoi tu la penses correcte.
Ne prends mon post ni pour un "oui tu te trompes" ni pour un "non tu ne te trompes pas", ce n'est aucun des deux, c'est véritablement une question.
Marsh Posté le 28-03-2008 à 18:48:21
Bah moi je crois ce que j'ai noter en cours dans ce cas... Je vais pas inventer la réponse, et j'arrive pas à trouver d'explications claires la dessu.
En tout cas, si dans mon cour j'ai noter que c'est impossible je veux bien le croire, mais je veut bien une explication si possible =)
Aussi ça me choque quand je vois ça :
http://pagesperso-orange.fr/cvince [...] e_A_f2.jpg
Il est dit que un A est un B...
Je le vois dans d'autres exemples sur le net, mais par exemple si ma classe de base s'appelle Forme, et si ma classe dérivée s'appelle Rectangle, je trouve que ça fait bisarre de dire qu'une Forme est un Rectangle, par contre l'inverse est vrai...
Marsh Posté le 28-03-2008 à 19:23:45
Svp, si quelqu'un passe par là, j'aurais besoins d'un réponse ce soir ^^'
Marsh Posté le 28-03-2008 à 19:28:48
Dans le contexte suivant :
X* x;
Y* y;
Tu as le droit de faire :
x = y;
Si et seulement si tout Y est un X.
En francais, t'as pas le droit de convertir implicitement un pointeur d'un type "plus general" vers un pointeur d'un type "plus specifique".
La raison est simple : supposons que J derive de K. Ca veut dire que tout J est un K, et donc que tout J peut etre vu comme un K. Mais par contre, un K n'est pas forcement un J. Donc pas le droit de faire l'affectation implicite de pointeurs dans l'autre sens.
Est-ce que c'est plus clair comme ca?
Marsh Posté le 28-03-2008 à 19:31:35
ReplyMarsh Posté le 28-03-2008 à 19:32:20
nebneblan a écrit : je trouve que ça fait bisarre de dire qu'une Forme est un Rectangle, par contre l'inverse est vrai... |
Ben voila, une forme n'est pas nécessairement un rectangle, donc de manière plus générale une forme n'est pas un rectangle (alors que l'inverse est vrai), donc ce que tu as cité est effectivement vrai
Marsh Posté le 28-03-2008 à 19:35:05
nebneblan a écrit : Bof bof... |
Remplace tes deux classes par Animal et Chien, et tu verras tout de suite ce qui te semble legitime ou non.
Marsh Posté le 28-03-2008 à 19:37:45
masklinn a écrit :
|
Mais alors pourquoi l'inverse est noté dans l'image que j'ai postée ?
Et ça ?
A1 * ptrA1;
A3 * ptrA3;
A3 unA3("bd" );
ptrA1=&unA3; // possible?
ptrA3=&unA3; //possible?
D'ailleurs les 2 dernières instructions je pige pas ce qu'elles font...
Marsh Posté le 28-03-2008 à 19:38:38
Ace17 a écrit : |
Vu comme ça je dirais que c'est bien faux, c'est bien ça ?
Marsh Posté le 28-03-2008 à 19:42:04
nebneblan a écrit : Vu comme ça je dirais que c'est bien faux, c'est bien ça ? |
Je ne sais pas, j'ai pas lu ton code. Mais t'inquiete, a mon avis t'as bon
Et n'accorde pas une confiance absolue a tes notes de cours ...
Marsh Posté le 28-03-2008 à 19:47:57
C'est justement pour ça que je poste ici.
Concernant ce que j'ai écrit avant, vous pouvez me donner des explications svp?
Marsh Posté le 27-03-2008 à 13:00:24
salut!
http://partiel.c.la
Sur le sujet 2007, à la 1ère question j'ai un doute sur l'affichage de unAutreB (voir le sujet).
Vous seriez simpa de m'expliquer ce point, merci
En clair est ce qu'un constructeur d'une classe de base peut créer un objet d'une classe dérivée?
class A
{
public:
A();
};
class B: public A
{
int sonI;
public:
B(int unB);
};
*********************
Est ce que on peut faire :
A * unA
unA = new B(5)
merci
Message édité par nebneblan le 27-03-2008 à 13:52:28