IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

utiliser une fonction d une class dans une autre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut utiliser une fonction d une class dans une autre
    bonjour,

    voila j ai un petit problème dans le cadre d un cour de c++
    sur le polymorphisme.

    mon problème est le suivant :

    mon professeur m a demandé d utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Base * Derived::Allocate()
    {
        Derived *Test;
        Test = new Derived (*this);
        return Test;
    }
    dans toutes les class enfant de la class Base qui, elle, est une une class abstraite.

    donc je dois mettre la fonction qui se trouve ici au dessus, dans une class qui elle se trouve

    dans un autre header (.h) que la class dans la quelle je dois la mettre.

    toutes les class, il y en a 4 doivent contenir cette fonction telle quelle

    mais je n y arrive pas.

    quelqu'un aurait il une solution s il vous plait ?

    merci d avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    C'est pourtant la base même du polymorphisme !!!

    Avant de te donner la solution (ce serait décidément trop simple ), je ne peux que te conseiller de relire ton cours car je serais vraiment étonné que la manière de le faire n'apparaisse pas en toute lettre

    Sinon, renseignes toi sur internet sur des termes comme "fonction virtuelle" voire "fonction virtuelle pure" (au niveau de la classe de base).

    Reviens vers nous en nous présentant un code un peu plus complet, et, au besoin, nous te redonneront un mini cours sur le sujet
    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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut
    et bien j avais déjà relu mon cour,

    et j avais mis ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CBase * CDerived::Allocate()
    {
        CDerived *pTemp;
        pTemp = new CDerived (*this);
        return pTemp;
    }
    dans chaque enfants de CBase c est a dire :

    CDerived, CSetType, Cpoint et CComplexe

    mais j ai un probleme au niveau du CDerived que CSetType.h ne semble pas trouver alors que j ai bien mi :
    virtual CBase * Allocate() = 0; dans CBase.h

    que les deux fonctions sont bien enfants de CBase car j ais mis :
    : public CBase dans CSetType.h et dans CDuplicate.h

    et que j ais bien mis la fonction allocate dans la patie public dans les 2 enfants.
    que se soit dans CSetType.h ou dans CDuplicate.h

    mais il me reste un problème.

    donc, pour le moment j ais ceci :
    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
     
    #include "CBase.h"
     
    class CPoint : public CBase
    {
    	private :
    		int m_Adresse1;
    		int m_Adresse2;
    	public :
    		void Affiche();
     
    	friend CBase * CDerived::Allocate();
     
    };
     
    CBase * CDerived::Allocate()
    {
    	CDerived *pTemp;
    	pTemp = new CDerived (*this);
    	return pTemp;
    }
    ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class CBase
    {
    	public :
    		virtual void Affiche() = 0;
    		virtual CBase * Allocate() = 0;
    };
    et ceci :



    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
     
    #include "CBase.h"
     
    class CDerived  : public CBase
    {
    	public :
     
    		CBase * CDerived::Allocate()
    		{
    			CDerived *pTemp;
    			pTemp = new CDerived (*this);
    			return pTemp;
    		}
     
    		void Affiche();
    };
    j ais quand même passé un certain temps, avant d aller voir la réponse sur le net.

    mais je vais encore aller revoir mon cour, j ais surement oublie quelque chose.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Oui, tu as manifestement oublié une ou deux choses

    D'abord, au niveau de la résolution des noms.

    Lorsque l'on définit une fonction en dehors de la classe dans laquelle elle est déclarée, la sytaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <type de retour> <nom de la classe>:: <nom de la fonction>(<paramètres éventuels>) <const éventuel>{
       /* contenu de la fonction */
    }
    Ensuite, le fait que le but des fonctions virtuelles est de permettre de les redéfinir dans les classes dérivées : tu les déclares comme virtuelles (éventuellement pure s'il n'y a pas moyen de donner un comportement par défaut) dans la classe de base, puis tu les déclares à nouveau dans chaque classe pour laquelle tu dois la définir.

    Et, bien sur, tu n'oublies pas de fournir la définition qui va avec (de préférence dans le fichier d'implémentation)

    Allez, encore un effort, et, si tu n'y arrives vraiment pas, je me verrai bel et bien contraint d'écrire un petit roman
    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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut
    ok, merci.

    je vais revoir tout ça avec le complément d information, que tu viens de me fournir.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 14
    Par défaut
    ben, en gros il me semble, que c est ce que j ais fais.

    mais mon probleme, est que le prof ne veux pas que j ecrive ceci dans CPoint

    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
    #include "CBase.h"
     
    class CPoint : public CBase
    {
    	private :
    		int m_Adresse1;
    		int m_Adresse2;
    	public :
    		void Affiche();
     
    	CBase * CPoint::Allocate()
    	{
    		CDerived *pTemp;
    		pTemp = new CDerived (*this);
    		return pTemp;
    	}
    };
    car, je pense, qu'il faut que je me serve de la fonction qui est écrite dans CDerived.

Discussions similaires

  1. appel d'une classe dans une fonction
    Par fraisa1985 dans le forum Général Java
    Réponses: 7
    Dernier message: 27/03/2008, 12h11
  2. Comment créer une liste ou une instance de classe dans une fonction ?
    Par Neolander dans le forum Général Python
    Réponses: 9
    Dernier message: 05/03/2008, 19h22
  3. [POO] appeler une methode de classe dans une fonction
    Par ryykko dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/02/2008, 22h10
  4. Réponses: 40
    Dernier message: 21/06/2007, 17h58
  5. [.NET2.0][C#]Passage type de classe dans une fonction
    Par SLE dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/06/2006, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo