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 :

Encore un soucis de constructeur


Sujet :

C++

  1. #1
    Membre confirm�
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par d�faut Encore un soucis de constructeur
    Bonjour.

    J'essaie de faire cet exercicehttps://erlerobotics.gitbooks.io/erl...cises_oop.html dont la solution est donn�e :

    Write a program that defines a shape class with a constructor that gives value to width and height. The define two sub-classes triangle and rectangle, that calculate the area of the shape area (). In the main, define two variables a triangle and a rectangle and then call the area() function in this two varibles.
    La solution propos�e :
    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
    // Exercises: OOP#include <iostream>
    // Exercise 1
     
    using namespace std;
     
    class Shape
    {
    protected:
    	float width, height;
    public:
    	void set_data (float a, float b)
    	{
    		width = a;
    		height = b;
    	}
    };
     
    class Rectangle: public Shape
    {
    public:
    	float area ()
    	{
    		return (width * height);
    	}
    };
     
    class Triangle: public Shape
    {
    public:
    	float area ()
    	{
    		return (width * height / 2);
    	}
    };
     
    int main (){
     
    	Rectangle rect;
    	Triangle tri;
    	rect.set_data (5,3);
    	tri.set_data (2,5);
    	cout << rect.area() << endl;
    	cout << tri.area() << endl;
    	return 0;
    }
    J'�tais personnellement parti avec l'id�e d'utiliser un constructeur au lieu d'utiliser une fonction "void set_data (float a, float b)" , comme ci-dessous :
    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
    #include <iostream>
    using namespace std;
     
    class Shape {        // The class
    protected:
    int hauteur;
    int largeur;
      public:          // Access specifier
     
        Shape(int x, int y) {  // Constructor with parameters
          hauteur = x;
          largeur = y;
        }
    };
    class Rectangle : public Shape {
    public:
     
    float area (){
    return (hauteur * largeur);
    }
    };
     
     class Triangle : public Shape {
     public:
     
    float area() {
    return (hauteur * largeur/2.0);
    };
     };
     
    int main() {
      Rectangle r(10, 99);
      Triangle t(3, 5);
     
     
      // Print values
      cout << "Aire du rectangle : " <<r.area() << "\n";
      cout << "Aire du triangle : " << t.area() << "\n";
      return 0;
    }
    Or, �a ne fonctionne pas et je ne vois pas comment corriger l'erreur ?

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Les constructeurs ne sont pas propag�s aux classes filles.
    Pour les exposer identiques, il y a la syntaxe using BaseClassName::BaseClassName;.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  3. #3
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Bonjour,

    Pour construire une Shape, il faut lui fournir 2 arguments.

    Les Rectangle et Triangle sont des Shape. Mais tu n'indiques pas comment les construire. Ton id�e est surement que �a soit comme une Shape. Pour cela tu dois d�finir les constructeurs ou dire que c'est comme Shape.
    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
    class Shape
    {
    public:
    	Shape( double width, double height ) : width_{width}, height_{height} {}  // fabriquer les membres au plus tôt
            virtual  area()const = 0;                 // indiquer que toutes les Forme ont une aire et que la lire ne modifie aucune Forme
            double  width()const { return  width_; }   // lire la largeur, ne modifie pas la Forme
            void  width( double w ) { width_ = w ; }
            double  height()const { return  height_; } // pour écrire/lire la hauteur
            void  height( double h ) { height_ = h; }
    private:                              // Ne jamais définir d'attribut protected, c'est public ou private
    	double  width_, height_;      // éviter d'utiliser le type float, double est à préférer sauf rares exceptions
    };
    class Rectangle : public Shape
    {
    public:
    	using Shape::Shape;     // Rectangle se construit en utilisant directement les constructeurs de Shape
    	double  area ()const override {
    		return  width() * height();
    	}
    };
    // ou
    class Triangle : public Shape
    {
    public:
    	Triangle( double width, double height ) : Shape{width, height} {}
    	double  area()const override {
    		return  width() * height() / 2;
    	}
    };

  4. #4
    Membre confirm�
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par d�faut
    Merci pour ces r�ponses.

    @dalfab
    A la ligne 4 :
    Shape( double width, double height ) : width_{width}, height_{height} {} // fabriquer les membres au plus t�t
    Je ne comprend pas cette partie :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     : width_{width}, height_{height}
    D'autre part, je ne comprend pas ce que fait ce constructeur, il n'y a rien dans le corps de la fonction ??

  5. #5
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Il initialise la donn�e membre width_ � l'aide de l'argument width pass� au constructeur, idem pour heigth. Du coup (et comme c'est tr�s souvent le cas), il ne reste plus rien � faire dans le corps du constructeur, tout est d�j� initialis� comme il faut.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  6. #6
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Encore un souci de syntaxe
    Par santacrus dans le forum VBA Access
    R�ponses: 9
    Dernier message: 09/09/2008, 06h47
  2. Encore un soucis de d�rivation de ostream
    Par Bolverk dans le forum SL & STL
    R�ponses: 2
    Dernier message: 21/08/2008, 15h03
  3. Encore un souci avec l'arri�re-plan Word !
    Par spyto dans le forum Word
    R�ponses: 5
    Dernier message: 28/05/2008, 15h24
  4. Encore un soucis avec IServerProvider
    Par r0d dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 18/01/2007, 22h28
  5. Encore un souci : Treeview
    Par hunzi dans le forum XMLRAD
    R�ponses: 1
    Dernier message: 16/09/2006, 18h12

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