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 :

Constructeur et Heritage


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 57
    Par défaut Constructeur et Heritage
    Bonjour

    J'ai un petit probleme.
    Mon programme comporte deux classes (class Base et class Derive qui herite publiquement de la classe Base)

    Dans la classe Base
    il y a mon constructeur par copie qui fonctionne correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base::Base(const Base & B){}
    Dans ma classe Derive je veux constuire un constructeur qui réutilise celui de la classe Base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Derive:: Derive(const Base & B):Base(B){}
    Mais cela ne fonctionne pas le debuger m'affiche
    "aucun constructeur par defaut approprie disponible"

    je dispose aussi dans ma classe base.h
    mais je ne sais pas trop a quoi cela servira.

    le but est de pouvoir réalisé ceux ci par exemple
    Derive D(Base(2,3)); base étant un tableau ou n'importe quoi

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    A mon avis, tu n'as pas de constructeur par défaut dans Base, et que tu as un constructeur par défaut dans Derive, ou que dans un de tes constructeurs, tu n'appelles pas un constructeur explicite de Base.

    Sinon, montre nous le code pour qu'on y voit plus clair parce que là je crois que tu regardes au mauvais endroit.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 57
    Par défaut
    Voila mon code.
    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
    22
    23
    24
    #pragma once
    #include <vector>
     
    class Tab2DChar
    {
    public:
    	Tab2DChar(const Tab2DChar & D);
    	Tab2DChar(unsigned nbLignes,unsigned nbColones);
    	Tab2DChar(unsigned nbLignes,unsigned nbColones, std::vector<char> v);
     
     
    	char & operator()(int Ligne,int Colones);
    	char operator()(int Ligne,int Colones) const;
    	Tab2DChar operator= (const Tab2DChar & C);
     
     
    	~Tab2DChar(void);
     
    	int GetNbLignes() const;
    	int GetNbColonnes() const;
     
    private:
    	std::vector< std::vector<char>> _tab;
    };
    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
     
    // toutes cette classe marche
     
    #pragma once
    #include "Tab2DChar.h"
     
    class Piece :
    	public Tab2DChar
    {
    public:
    	Piece(const Tab2DChar & T);
    	~Piece(void);
     
    	Piece RotationD();
    	Piece RotationG();
    protected:
    	Tab2DChar _T;
    };
    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
     
    #include "Piece.h"
     
     
    Piece::Piece(const Tab2DChar & T):Tab2DChar(T)
    {
    }
     
    Piece::~Piece(void)
    {
    }
     
    Piece Piece::RotationD()
    {
    }
    Piece Piece::RotationG()
    {
    }
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #include "Tab2DChar.h"
    #include "Piece.h"
    #include<iostream>
     
    using namespace std;
    void Affiche(const Tab2DChar & T)
    {
    	for(int i=0;i <T.GetNbLignes();i++)
    	{
    		cout<< '|';
    		for(int j=0; j<T.GetNbColonnes();j++)
    		{
    			cout<< T(i,j) <<" | ";
    		}
    		cout<< "\n";
    	}
    	cout<<"\n";
    }
     
    void main()
    {
    	Tab2DChar T1(2,3);
    	T1(1,2)='A';
    	T1(0,0)='B';
    	T1(1,1)='C';
    	Affiche(T1);
     
    	char tabC[6]={'C','H','A','C','H','A'};
    	vector<char> vC(tabC,tabC+6);
     
    	Tab2DChar T2(2,3,vC);
    	Affiche(T2);
     
    	Tab2DChar T3(3,2,vC);
    	Affiche(T3);
     
    	Tab2DChar T4(2,2,vC);
    	Affiche(T4);
     
    	Tab2DChar T5(2,4,vC);
    	Affiche(T5);
     
    	Tab2DChar T6(2,4);
    	T6=T5;
    	Affiche(T6);
     
     
    	cout<< "verif"<<endl;
    	Tab2DChar T7(T1);
    	Affiche(T7);
     
    	char TT[6]={'T','T','T',0,'T',0,};
    	vector<char> vT(TT,TT+6);
    	Tab2DChar T9(2,3,vT);
     
     
    	system("PAUSE");
    }
    C'est pour realisé un tetrise en mode console

    G une classe Tab2DChar et une Piece

    Merci
    Fichiers attachés Fichiers attachés

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    bonjour,

    effectivement, il te manque un constructeur par défaut pour ta classe pere Tab2Dchar. Je t'invite à faire un tour sur la faq sur les constructeurs.

    Mais au-delà de cette omission, il y a quelque chose aui n'est pas logique dans la conception de ta classe Piece: elle hérite de Tab2DChar et en même temps elle en possède une instance. Dans ton cas je ne vois pas l'intérêt: soit tu fais une aggregation, soit un héritage, mais pas les deux à la fois.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par r0d Voir le message
    Mais au-delà de cette omission, il y a quelque chose aui n'est pas logique dans la conception de ta classe Piece: elle hérite de Tab2DChar et en même temps elle en possède une instance. Dans ton cas je ne vois pas l'intérêt: soit tu fais une aggregation, soit un héritage, mais pas les deux à la fois.
    Soit c'est un décorateur. (mais ça m'étonnerait)

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Un décorateur ne contient pas, il référence. Ou alors, il doit être template.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Effectivement. Réponse trop hâtive de ma part

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/10/2005, 12h50
  2. [Language][Héritage] Erreur à propos du constructeur
    Par zizou771 dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 16h48
  3. [Language] pb d'heritage / constructeur
    Par Bountyx dans le forum Langage
    Réponses: 4
    Dernier message: 12/04/2005, 09h49
  4. [C++]Heritage et constructeur de copie
    Par matazz dans le forum C++
    Réponses: 2
    Dernier message: 25/03/2005, 12h31
  5. [C++] Heritage - Probleme constructeur
    Par yanndublanche dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2004, 10h17

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