begin process at 2012 05 30 18:35:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Template ou virtuel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Template ou virtuel

mardi 8 décembre 2009 à 19:58:00 | Template ou virtuel

cogno

Bonjour les amis,

supposons un pointeur sur un Objet A, et fct une fonction membre de l'objet.

quelle est la différence fondamentale entre:

1/ La classe est définie dans un template de type T, et on fait:
T * A;
A->fct()

2/ La classe n'est pas définie dans un template, mais sa fonction fct est virtuelle
Objet * A;
A->fct()

Cette question m'a été posée en entretien d'embauche, et j'ai séché.

Merci

mardi 8 décembre 2009 à 21:15:31 | Re : Template ou virtuel

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
1) La méthode appelée est une méthode généré à la compilation. Il y aura autant de méthode construites que de type l'utilisant.

2) Si la méthode est virtuelle, alors cela veut dire qu'elle peut être redéfinit dans les classes filles. Dans le premier cas, si la méthode n'est pas virtuelle, il n'est pas dit qu'elle soit redéfinit, dans certains cas.
mardi 8 décembre 2009 à 21:21:15 | Re : Template ou virtuel

cogno

Réponse acceptée !
Bonjour Pingu,

donc toi tu dis que la différence fondamentale entre 1 et 2, c'est le moment ou sont prises en compte les fonctions?
Une très tot, lors de la compilation (cas 1/), et l'autre au moment de l'exécution (cas 2/)?
mardi 8 décembre 2009 à 21:27:48 | Re : Template ou virtuel

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Non, l'une est construite, donc écrite à la compilation, l'autre non. En revanhce les deux, sont construites à la compilation. Il peut y avoir plusieurs versions d'une méthode templaté, mais une seule d'une méthode "normale".
Les deux ne sont pas en opposition et servent deux but différents, donc j'ai du mal à comprendre ce que l'on voulait te faire dire.
mardi 8 décembre 2009 à 21:35:54 | Re : Template ou virtuel

cogno

Réponse acceptée !
On m'a parlé d'une différence fondamentale... (et pas de les comparer en disant l'une est mieux..)

Donc j'suis parti dans un délire (je pense) de temps d'exécution, en disant que le template doit checker le type, l'adapter...

Mais bon je me sentais comme sur du sable mouvant où mes mots faisaient vibrer le sol :)

Dans ton dernier commentaire Mr Pingu, tu dis que la version Template est écrite a la compilation et l'autre non?
mardi 8 décembre 2009 à 21:42:05 | Re : Template ou virtuel

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Soit:
Code C/C++ :
template <typename T>
void func(T x)
{
...
}


Ce code "n'existe pas". Tant que tu ne l'utilise pas, il ne sera pas présent dans ton code compilé. A chaque fois que tu l'utilise, une nouvelle version est créée.

Ex:
Code C/C++ :
func<int>(4);
func<MaClasse>(new MaClass());

Lancera de manière transparente l'écriture de deux fonctions:
Code C/C++ :
void func(int x)
{
...
}
void func(MaClasse x)
{
...
}
mardi 8 décembre 2009 à 21:45:52 | Re : Template ou virtuel

cogno

Réponse acceptée !
d'accord, alors que le virtual...?
mardi 8 décembre 2009 à 21:52:24 | Re : Template ou virtuel

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
N'a rien à voir.
Virtual veut dire: Il est possible de redéfinir une méthode dans une méthode fille, en cas d'upcasting. (L'upcasting est le fait de faire rentrer une classe fille dans une classe mère).

Ex:
Code C/C++ :
#include <iostream>

class Mother
{
public:
  void aff() { std::cout << "mother" << std::endl; }
};

class Daughter : public Mother
{
public:
  void aff() { std::cout << "daughter" << std::endl; }
};

class MotherWithVirtual : public Mother
{
public:
  virtual void aff() { std::cout << "mother" << std::endl; }
};

class Daughter2 : public MotherWithVirtual
{
public:
  void aff() { std::cout << "daughter" << std::endl; }
};

int main()
{
  Daughter d;
  d.aff(); // Affichera bien "daughter"

  Daughter* b = new Daughter;
  b->aff(); // Affichera bien "daughter"

  Mother* m = new Daughter;
  m->aff(); // N'affichera pas "daughter", mais "mother"

  MotherWithVirtual* k = new Daughter2;
  k->aff();  // Affichera bien "daughter"

  return 0;
}
mardi 8 décembre 2009 à 21:56:59 | Re : Template ou virtuel

cogno

Réponse acceptée !
Merci Pingu,

C est les deux cas de fonctionnements des Template et des Virtual. Cependant j'pense pas que le mec attendait ça. Il m'a vraiment dit, il y a une différence fondamentale.

Ne serait-ce pas dans l'appel des fonctions?

Que se passe-t-il quand on appelle une fonction d'un template (point par point) ?
Que se passe-t-il exactement qu'on appelle un fonction virtuelle (étant une classe fille je suppose..) ?

Il doit y avoir un détail qui rend ces deux cas très différents
mardi 8 décembre 2009 à 21:58:23 | Re : Template ou virtuel

cogno

je ne pense pas que ce soit une différence fonctionnelle

1 2

Cette discussion est classée dans : fonction, objet, template, virtuel, fct


Répondre à ce message

Sujets en rapport avec ce message

fonction templates amies [ par littlefl ] Ma question peu paraître simple (et peut-être qu'elle l'est) mais je n'arrive pas à déclarer une fonction template amie d'une classe. La raison, c'ets compteur binaire [ par DJOL ] bonjour ami developpeur!je suis en 1ere année de bts iris et je dois réaliser un compteur binaire en programmation objet. l'objet est réaliser mais la fonction pr detruire l'objet qui l'appel [ par mat74 ] Salut a ts ,voila je voudrai creer une fonction qui permettrai de detruire l'objet qui l'appel ( ds une classe )j'ai essayer sa :void ennemis::detruir quelle fonction pour avoir le handle afin de crée un objet directinput ? [ par vini456 ] bonjour ,quelle est la fonction pour avoir le handle de ma winmain afin de crée un objet directinput ? une classe static [ par Adeon ] bonjour a tous!je suis sur le developpement d'un jeux.certaine classe ne contienne qu'un seul objet comme par exemple la classe Interface, ou encore l Class derivée , Template ( POURQUOI ES-CE CI DIFFICILE) ??? [ par nawakator ] J'ai déjà posé cette question, mais je la repose car elle est essentiel pour mon projet!J'ai créer un template permettant de géré une liste chainé de contenu d'un objet [ par erazor ] salut, j'ai besoin de recuperer toutes les donnes contenues dans un objet pour les utiliser avec une fonction appartenant a un autre objet, avez une i inclure un objet dans une fonction d'un autre objet... [ par ptidiable ] Salut a tous :)Voila j'ai deux Objets : Serpent et Moteurj'aimerais fair une fonction dans serpent qui reçoivent en paramétre un objet de type Moteurl appliquer la fonction "sleep" sur un seul objet [ par malbackt ] Bonsoir :C'est encore moi ;S'il vous plait cette fois ci je veux savoir  comment appliquerla fonction "Sleep()"sur un seul objet de la scène, et pas s reprendre une fct de main [ par MirKoRn ] je voudrai savoir si il y a une fonction pour reprendre les éléments de main(pour moi un tableau) pour le mettre dans une autre fonction, toujours sur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,122 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales