Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1636 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  classes dérivées et pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

classes dérivées et pointeurs

n°1708679
nebneblan
Posté le 27-03-2008 à 13:00:24  profilanswer
 

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  :jap:

 

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
mood
Publicité
Posté le 27-03-2008 à 13:00:24  profilanswer
 

n°1708747
Taz
bisounours-codeur
Posté le 27-03-2008 à 15:06:04  profilanswer
 

oui, puisque qu'un B est un A.
 
(ton phrasé n'est pas clair, mais le code est OK (modulo les ;))

n°1709107
nebneblan
Posté le 28-03-2008 à 10:04:07  profilanswer
 

Et par contre qu'est ce qui n'est pas possible de faire?
 
ça déjà:
 
B unB
unB = new A()
 
d'autres?
 
 

n°1709135
_darkalt3_
Proctopathe
Posté le 28-03-2008 à 11:03:30  profilanswer
 

Que dit ton compilateur si tu tentes une telle manip ?


---------------
Töp of the plöp
n°1709186
nebneblan
Posté le 28-03-2008 à 13:04:01  profilanswer
 

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?


Message édité par nebneblan le 28-03-2008 à 13:04:07
n°1709280
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2008 à 14:48:04  profilanswer
 

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)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1709453
nebneblan
Posté le 28-03-2008 à 18:29:20  profilanswer
 

Bah alors j'ai mal noter un truc en cours.
 
Dans mon exemple de cours j'ai ça:
 

Code :
  1. class A1
  2. {
  3.   char sonC;
  4.   public:
  5.      A1(char c);
  6. };
  7. class A3: public A1
  8. {
  9.   string saChaine;
  10.   public:
  11.      A3(string s)
  12. };


 
Et j'ai marquer que les instructions suivantes sont fausses car il y plus de données dans A3 que dans A1:

Code :
  1. A3 * ptrA3;
  2. ptrA3=new A1('y');


 

n°1709457
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2008 à 18:38:08  profilanswer
 

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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1709463
nebneblan
Posté le 28-03-2008 à 18:48:21  profilanswer
 

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...

Message cité 1 fois
Message édité par nebneblan le 28-03-2008 à 18:52:11
n°1709485
nebneblan
Posté le 28-03-2008 à 19:23:45  profilanswer
 

Svp, si quelqu'un passe par là, j'aurais besoins d'un réponse ce soir ^^'

mood
Publicité
Posté le 28-03-2008 à 19:23:45  profilanswer
 

n°1709488
Ace17
Posté le 28-03-2008 à 19:28:48  profilanswer
 

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?


Message édité par Ace17 le 28-03-2008 à 19:29:28
n°1709496
nebneblan
Posté le 28-03-2008 à 19:31:35  profilanswer
 

Bof bof...
 
Du coup le code que j'ai posté précédemment est bien faux ou pas?

n°1709497
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2008 à 19:32:20  profilanswer
 

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


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1709503
Ace17
Posté le 28-03-2008 à 19:35:05  profilanswer
 

nebneblan a écrit :

Bof bof...
 
Du coup le code que j'ai posté précédemment est bien faux ou pas?


Remplace tes deux classes par Animal et Chien, et tu verras tout de suite ce qui te semble legitime ou non.

n°1709506
nebneblan
Posté le 28-03-2008 à 19:37:45  profilanswer
 

masklinn a écrit :


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

 

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...


Message édité par nebneblan le 28-03-2008 à 19:42:36
n°1709508
nebneblan
Posté le 28-03-2008 à 19:38:38  profilanswer
 

Ace17 a écrit :


Remplace tes deux classes par Animal et Chien, et tu verras tout de suite ce qui te semble legitime ou non.


 
Vu comme ça je dirais que c'est bien faux, c'est bien ça ?

n°1709509
Ace17
Posté le 28-03-2008 à 19:42:04  profilanswer
 

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 ...

n°1709513
nebneblan
Posté le 28-03-2008 à 19:47:57  profilanswer
 

C'est justement pour ça que je poste ici.

 

Concernant ce que j'ai écrit avant, vous pouvez me donner des explications svp?

 


Message édité par nebneblan le 28-03-2008 à 19:48:36

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  classes dérivées et pointeurs

 

Sujets relatifs
problème de classes qui s'incluent entre elles[RESOLU] Portée variables dans les classes ?
Probleme ciblage classes pour eviter _rootClasses DAO (MVC2)
Petite question sur la stl et les pointeurs.je ne sais pas comment manipuler les pointeurs :(
[résolu] Eclipse me crée des classes en ...$1.classProg µcontrolleur : Ports et pointeurs ...
[AS3] De l'intérêt des classes internal ?Les pointeurs: je bloque
Plus de sujets relatifs à : classes dérivées et pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR