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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

[C++] QCM Recrutement ?

n°906812
Taz
bisounours-codeur
Posté le 24-11-2004 à 17:10:52  profilanswer
 

Reprise du message précédent :

Lam's a écrit :

C'est marrant, moi je suis pas d'accord.  
 
D'ailleurs, ça a été évoqué il n'y a pas longtemps. Si tu veux faire une classe abstraite, c'est très pratique de pouvoir faire:

Code :
  1. class Foo {
  2.   virtual ~Foo() {} =0;
  3. };



oui et comme tu vois, c'est la du laxisme, puisque le destructeur n'est pas virtuel pure : il a bien une définition !
edit : je viens de lire le reste


Message édité par Taz le 24-11-2004 à 17:12:46
mood
Publicité
Posté le 24-11-2004 à 17:10:52  profilanswer
 

n°906825
Taz
bisounours-codeur
Posté le 24-11-2004 à 17:19:29  profilanswer
 

toutes façons, je me suis vautré. Je viens de lire l'ARM, et c'est écrit que pour des raisons techniques (de la branlette pour économiser une résolution virtuelle), une fonction virtuelle pure peut avec une définition et être appelée et peut alors être appelée avec un qualifieur explicite. Quelle merde... !

n°906845
HelloWorld
Salut tout le monde!
Posté le 24-11-2004 à 17:28:58  profilanswer
 

Oui c'est pour ça que j'ai filé le lien vers la FAQ. C'est expliqué : virtuel pur ça veut juste dire que la fonction doit être supplantée, et non qu'elle ne peut être implémentée.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°906863
Taz
bisounours-codeur
Posté le 24-11-2004 à 17:38:20  profilanswer
 

ben en fait à lire l'arm, pas vraiment. D'ailleurs il est interdit d'appler une fonction virtuelle pure depuis un constructeur, pour preuve. Mais y a un petit paragraphe à la con là-dessus avec écrit en gros DANGER


Message édité par Taz le 24-11-2004 à 17:40:13
n°906878
chrisbk
-
Posté le 24-11-2004 à 17:45:49  profilanswer
 

Vous etes tous des nuls, avec des reponses comme ca je vous foutrais tous dehors a coup de pieds au derriere :o bande de jeanfoutre :o


---------------
NP: HTTP Error 764 Stupid coder found
n°906882
Taz
bisounours-codeur
Posté le 24-11-2004 à 17:49:06  profilanswer
 

ça me être une bonne technique, de gueuler un bon coup sur le candidat voir s'il résite à la pression

n°906885
Woof
Posté le 24-11-2004 à 17:57:07  profilanswer
 

Taz a écrit :

ça me être une bonne technique, de gueuler un bon coup sur le candidat voir s'il résite à la pression


Pas d'accord, je ne cherche pas quelqu'un de particulièrement résistant à la pression.... Pis je trouve les méthodes de recrutement "musclées" d'un autre age ( c'était très utlisé par les grands cabinets de consulting....)

n°906887
Taz
bisounours-codeur
Posté le 24-11-2004 à 17:58:21  profilanswer
 

et moi je comprends pas qu'on t'es demandé à toi de recruter un programmeur C++

n°906889
Woof
Posté le 24-11-2004 à 18:02:48  profilanswer
 

Taz a écrit :

et moi je comprends pas qu'on t'es demandé à toi de recruter un programmeur C++


bah, les aléas du boulot...

n°906890
Lam's
Profil: bas.
Posté le 24-11-2004 à 18:02:58  profilanswer
 

Allez c'est la fête du slip...
 

Code :
  1. #include <iostream>
  2. struct Foo {
  3.   virtual void Hello() = 0;
  4. };
  5. void Foo::Hello()
  6. {
  7.   std::cout<<"Hello"<<std::endl;
  8. }
  9. struct Bar : Foo {
  10.   void Hello() {  std::cout<<"Bar" << std::endl; }
  11. };
  12. int main()
  13. {
  14.   Bar b;
  15.   b.Foo::Hello();
  16. }

mood
Publicité
Posté le 24-11-2004 à 18:02:58  profilanswer
 

n°906891
Taz
bisounours-codeur
Posté le 24-11-2004 à 18:03:53  profilanswer
 

je déteste :/

n°906893
Lam's
Profil: bas.
Posté le 24-11-2004 à 18:08:36  profilanswer
 

En fait, je voulais vérifier que mon compilo (aC++ de HP) exécutait bien cette délicatesse:

Code :
  1. #include <iostream>
  2. struct Foo {
  3. virtual ~Foo() = 0;
  4. };
  5. Foo::~Foo()
  6. {
  7.   std::cout<<"Hello"<<std::endl;
  8. }
  9. struct Bar : Foo {
  10. ~Bar() {  std::cout<<"Bar" << std::endl; }
  11. };
  12. int main()
  13. {
  14.   Bar b;
  15.   b.~Bar();
  16. }


 
Résultat:

Citation :

Bar
Hello
Bar
Hello

n°906929
el muchach​o
Comfortably Numb
Posté le 24-11-2004 à 19:00:44  profilanswer
 

Et si tu appelles b.~Foo(), normalement, ça n'affiche que "Hello", d'où le risque d'erreurs bien pourries quand on met "= 0" (et je ne suis pas sûr que le compilo signale quoi que ce soit en plus).
 
(Note aux débutants : à part pour cet exemple sans conséquences, l'appel explicite du destructeur est à proscrire.)


Message édité par el muchacho le 24-11-2004 à 19:04:45
n°906939
HelloWorld
Salut tout le monde!
Posté le 24-11-2004 à 19:07:41  profilanswer
 

Bah il suffit d'annuler l'appel au destructeur en faisant ainsi :

Code :
  1. int main()
  2. {
  3.   Bar b;
  4.   b.~Bar();
  5.   b.Bar::Bar();
  6. }


C'est la technique de Bar::Bar() :whistle:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°906943
Lam's
Profil: bas.
Posté le 24-11-2004 à 19:11:54  profilanswer
 

el muchacho a écrit :

Et si tu appelles b.~Foo(), normalement, ça n'affiche que "Hello", d'où le risque d'erreurs bien pourries quand on met "= 0" (et je ne suis pas sûr que le compilo signale quoi que ce soit en plus).
 
(Note aux débutants : à part pour cet exemple sans conséquences, l'appel explicite du destructeur est à proscrire.)


Pas exactement. Tu ne peux pas faire b.~Foo(); (tous les compilos te l'interdisent).
 
et si tu utilises ça:

Code :
  1. {
  2.   Foo * b = new Bar;
  3.   b->~Foo();
  4. }


 
Ca te donne:

Citation :

Bar
Hello


n°906948
el muchach​o
Comfortably Numb
Posté le 24-11-2004 à 19:16:27  profilanswer
 

Lam's a écrit :

Pas exactement. Tu ne peux pas faire b.~Foo(); (tous les compilos te l'interdisent).


Ah bon ? :??: Tiens faudrait que j'essaye.
(pour la suite, je suis d'accord)
 
edit : ah oui, évidemment, vu que la base est virtuelle...


Message édité par el muchacho le 24-11-2004 à 19:27:38
n°906951
Taz
bisounours-codeur
Posté le 24-11-2004 à 19:20:25  profilanswer
 

tiens, j'ai une question à propos de VC++.
 
est-ce que ça support le retour covariant dans le cas du base virtuelle ?
 

Code :
  1. class Foo
  2. {
  3. public:
  4.   virtual Foo* clone() const
  5.   {
  6.     return new Foo(*this);
  7.   }
  8.   virtual ~Foo() { }
  9. };
  10. class Bar : virtual public Foo
  11. {
  12. public:
  13.   virtual Bar* clone() const
  14.   {
  15.     return new Bar(*this);
  16.   }
  17.   virtual ~Bar() { }
  18. };

n'est implémenté que depuis g++-3.4 par exemple

n°906952
blackgodde​ss
vive le troll !
Posté le 24-11-2004 à 19:23:20  profilanswer
 

tiens me semble qu'il y a un bug sur vs 7.1 d'ailleurs avec cette histoire d'héritage virtuel / méthode virtuelle ?
 
(ca va alimenter le moulin de Taz)


---------------
-( BlackGoddess )-
n°906954
Lam's
Profil: bas.
Posté le 24-11-2004 à 19:28:03  profilanswer
 

Yup, VC++ gère les covariant (VS6.0 ne les gérait évidemment pas).

n°906956
Taz
bisounours-codeur
Posté le 24-11-2004 à 19:30:32  profilanswer
 

la palme à ce truc que nous à fait une année un prof. Il avait écrit Foo, à nous de faire une classe Bar en dérivant.
 

Code :
  1. #include <iostream>
  2. using std::cout;
  3. class Foo
  4. {
  5. public:
  6.   virtual ~Foo() { cout << this << " Foo::~Foo()\n"; }
  7.   Foo& operator=(const Foo &f)
  8.   {
  9.     cout << this <<" Foo::operator=(const Foo &f)\n";
  10.     // j'ai la flemme de faire une fonction clear
  11.     // alors j'appelle le destructeur
  12.     this->~Foo();
  13.     // et après je remettais ce qu'il faut
  14.     // ni vu ni connu
  15.     return *this;
  16.   }
  17. };
  18. class Bar : public virtual Foo
  19. {
  20. public:
  21.   virtual ~Bar() { cout << this << " Bar::~Bar()\n"; }
  22.   Bar& operator=(const Bar &f)
  23.   {
  24.     cout << this << " Bar::operator=(const Bar &f)\n";
  25.     static_cast<Foo&>(*this) = f;
  26.     // ici *this en tant que Bar a été détruit
  27.     return *this;
  28.   }
  29. };
  30. int main()
  31. {
  32.   Bar a, b;
  33.   a = b;
  34.   cout << "Bye\n";
  35. }


 
pour le débutant qui passe, 'N'appeler JAMAIS le destructeur explicitement'

n°906957
Taz
bisounours-codeur
Posté le 24-11-2004 à 19:31:26  profilanswer
 

Lam's a écrit :

Yup, VC++ gère les covariant (VS6.0 ne les gérait évidemment pas).

non, je parle du covariant, je parle du covariant dans le cadre d'héritage virtuel
 
BG > http://forum.hardware.fr/forum2.ph [...] 65#t901383


Message édité par Taz le 24-11-2004 à 19:32:00
n°906959
Lam's
Profil: bas.
Posté le 24-11-2004 à 19:35:09  profilanswer
 

Taz a écrit :

non, je parle du covariant, je parle du covariant dans le cadre d'héritage virtuel
 
BG > http://forum.hardware.fr/forum2.ph [...] 65#t901383


Oops, j'avais zappé l'héritage virtuel dans ton code. J'en ai aucune idée en fait.  
 
Faudrait demander à quelqu'un de tester, sinon je regarderai ça cette nuit.

n°906961
Taz
bisounours-codeur
Posté le 24-11-2004 à 19:36:36  profilanswer
 

ouais merci, ça serait intéressant.

n°906976
Lam's
Profil: bas.
Posté le 24-11-2004 à 19:53:05  profilanswer
 

Donc, a priori, ce code là suffit à tester le truc ?
 

Code :
  1. #include <iostream>
  2. class Foo
  3. {
  4. public:
  5.   virtual Foo* clone() const
  6.   {
  7.     return new Foo(*this);
  8.   }
  9.   virtual bool isOK() { return false; }
  10.   virtual ~Foo() { }
  11. };
  12. class Bar : virtual public Foo
  13. {
  14. public:
  15.   virtual Bar* clone() const
  16.   {
  17.     return new Bar(*this);
  18.   }
  19.   virtual bool isOK() { return true; }
  20.   virtual ~Bar() { }
  21. };
  22. int main()
  23. {
  24.   Foo * f = new Bar;
  25.   std::cout << f->clone()->isOK() << std::endl;
  26. }


Message édité par Lam's le 24-11-2004 à 19:55:19
n°906985
Taz
bisounours-codeur
Posté le 24-11-2004 à 19:59:16  profilanswer
 

je t'ai déjà filé du code à tester. g++ <= 3.4 ne le compile pas. Mais tu peux toujours tester le tiens

n°906991
Lam's
Profil: bas.
Posté le 24-11-2004 à 20:05:47  profilanswer
 

Ah, ça passe même pas à la compil ? Bah je testerai alors.
 
Il faut savoir que traditionnellement, Visual studio peut compiler à peu près n'importe quoi, quitte à générer du code de merde derrière. Donc je testerai aussi à l'éxécution :).

n°906995
el muchach​o
Comfortably Numb
Posté le 24-11-2004 à 20:07:35  profilanswer
 

Lam's a écrit :

Ah, ça passe même pas à la compil ? Bah je testerai alors.
 
Il faut savoir que traditionnellement, Visual studio peut compiler à peu près n'importe quoi, quitte à générer du code de merde derrière. Donc je testerai aussi à l'éxécution :).


Garbage in -> garbage out.

n°907041
chrisbk
-
Posté le 24-11-2004 à 21:18:10  profilanswer
 

Lam's a écrit :

Donc, a priori, ce code là suffit à tester le truc ?
 

Code :
  1. #include <iostream>
  2. class Foo
  3. {
  4. public:
  5.   virtual Foo* clone() const
  6.   {
  7.     return new Foo(*this);
  8.   }
  9.   virtual bool isOK() { return false; }
  10.   virtual ~Foo() { }
  11. };
  12. class Bar : virtual public Foo
  13. {
  14. public:
  15.   virtual Bar* clone() const
  16.   {
  17.     return new Bar(*this);
  18.   }
  19.   virtual bool isOK() { return true; }
  20.   virtual ~Bar() { }
  21. };
  22. int main()
  23. {
  24.   Foo * f = new Bar;
  25.   std::cout << f->clone()->isOK() << std::endl;
  26. }




 
vla ske ca sort :


'Foo *Bar::clone(void)' : overloaded member function not found in 'Bar'


Message édité par chrisbk le 24-11-2004 à 21:20:05
n°907051
Taz
bisounours-codeur
Posté le 24-11-2004 à 21:29:11  profilanswer
 

euh juste pour voir, vire le virtual ligne 16 ?

n°907053
chrisbk
-
Posté le 24-11-2004 à 21:31:04  profilanswer
 

Taz a écrit :

euh juste pour voir, vire le virtual ligne 16 ?


 
ca compile et ca affiche 1
(je me perds completement dans ce bordel)

n°907054
Taz
bisounours-codeur
Posté le 24-11-2004 à 21:32:19  profilanswer
 

ok, donc le CVR n'est pas complètement implémenté dans VC++ 2003
 
il est dans g++ >= 3.4 (et avec un vrai message d'erreur d'ailleurs)


Message édité par Taz le 24-11-2004 à 21:33:39
n°907055
chrisbk
-
Posté le 24-11-2004 à 21:32:47  profilanswer
 

(2003)

n°907057
Lam's
Profil: bas.
Posté le 24-11-2004 à 21:33:44  profilanswer
 

7.1 :)

n°907058
Taz
bisounours-codeur
Posté le 24-11-2004 à 21:33:56  profilanswer
 

ok, ben c'est pas très brillant :/

n°907063
chrisbk
-
Posté le 24-11-2004 à 21:36:17  profilanswer
 

Taz a écrit :

ok, ben c'est pas très brillant :/


 
si je vois ce que je vios, gcc 3.4 date de "November 4, 2004", y'a pas de quoi pousser des hauts cris non plus
 
edit : ah, non, April 18, 2004


Message édité par chrisbk le 24-11-2004 à 21:36:41
n°907068
Lam's
Profil: bas.
Posté le 24-11-2004 à 21:38:28  profilanswer
 

Ceci-dit, mon compilo HP qui date de 2003 le fait. :(
 
Plus d'infos là, y compris quelques explications:
http://www.clanghelp.com/Covariant [...] 298-a.html

n°907069
chrisbk
-
Posté le 24-11-2004 à 21:39:25  profilanswer
 

(moi ce qui me fait halluciner c'est qu'on puisse pondre une norme qui nécéssite 10ans de dev a etre implanté. Quand meme, quoi)

n°907085
nraynaud
lol
Posté le 24-11-2004 à 21:48:31  profilanswer
 

Taz a écrit :

En théorie objet, le cycle de vie d'un objet se termine par un destructeur/finaliseur.  

non non, justement, la théorie a un peu oublé que la mémoire est pas infine dans la réalité, d'où les petits conflits entre langages.
 
J'ai pas lu le fil, mais je me souviens que je me suis fait sécher sur du C++ sur feuille pendant un entretien, sans google je suis incapable de programmer.


---------------
trainoo.com, c'est fini
n°907275
Taz
bisounours-codeur
Posté le 25-11-2004 à 00:05:10  profilanswer
 

Lam's a écrit :

Ceci-dit, mon compilo HP qui date de 2003 le fait. :(
 
Plus d'infos là, y compris quelques explications:
http://www.clanghelp.com/Covariant [...] 298-a.html

bah voilà !
 
chrisbk > je te réponds en citant Lam's « on à ce pour quoi on paie »

n°907280
chrisbk
-
Posté le 25-11-2004 à 00:06:24  profilanswer
 

hin ?

n°907298
Taz
bisounours-codeur
Posté le 25-11-2004 à 00:16:36  profilanswer
 

non je fanfaronne pas. Seulement quand je gueule contre VC++, on me dit que c'est pas mieux que gcc. Et ces derniers temps, Lam's me disait que gcc avait des messages d'erreur pourris ou je sais plus quoi. Alors sur ce point, que gcc soit une version plus récemment publiée que vc++ ou pas, ça ne change rien : gcc est gratuit, libre et activement maintenu.
 
Je vois pas pourquoi on ne pourrait pas attendre quelque chose du même genre de la part de vc++ : ils ont les moyens.
 
Bref, c'est très dommageable, parce que sans retour covariant, on aura beau se branler sur la POO (et ça vaut pour tout langage), et ben on perd un sacré morceau d'information, on se retrouve à caster comme des cons (ça serait des void* ça changerait rien)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
recrutement debutants et confirmés pour mini defis en c[Recrutement] d'un programmeur pour le Mod D-Day On Omaha Call of Duty
Recrutement de quelqu'un qui est bon en PHPRecrutement un pros de la 2d et 3d si ya .. un pro du MP3, Midi ....
faire un QCM qui donne accès à une page web en cas de bonne réponseJAVASCRIPT : QCM
[Recrutement] cherche partenaire pour....[ * ] Recrutement pour le staff d'un site sur la prog (communaute)
[RECRUTEMENT] - Programmeur PHP 
Plus de sujets relatifs à : [C++] QCM Recrutement ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)