Appel constructeur

Fermé
angel_08 Messages postés 1 Date d'inscription mardi 2 février 2016 Statut Membre Dernière intervention 2 février 2016 - 2 févr. 2016 à 22:21
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 7 févr. 2016 à 18:45
salut , je recontre un probleme a l utilisation de l heritage dans les classes (au niveau de l appel au conscruteur )
j'ai la classe article
ceci le constructeur
classe Article
{/**/
Article(int c,char* d,int q)
{
code=c;
strcpy(des,d);
qnt=q;
}
/**/
}
voici la classe Produit herite de la classe Article

#include<stdio.h>
#include<iostream>
#include "Article.cpp"
#include <string>
class Produit_Fini : public Article
{
public:
Produit_Fini(char* marque,float prix,int nb_op,char* op):Article(code,des,qnt)
{
strcpy(this->marque,marque);
this->prix=prix;
this->nb_op=nb_op;
strcpy(this->op,op);
}
void print()
{ this->affiche();
cout <<" marque :"<<marque;
cout <<"\n prix :"<<prix;
cout <<"\n nombre d operation :"<<nb_op;
cout <<" oprations:"<<op;
}

protected:

char* marque;
float prix;
int nb_op;
char* op;
};
int main()
{
Produit_Fini p("BIC",1.200,1,"embalage",100,"stylo",12);
p.print();
return (0);
}

l erreur qui s affichera lors de BUILD
|error: no matching function for call to ‘Produit_Fini::Produit_Fini(const char [4], double, int, const char [9], int, const char [6], int)’|
qulque'un m'apprend comment j utilise les constructeur svp et l appel des fonctions et les constructeurs dans le main

2 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
7 févr. 2016 à 18:45
Bonjour,

Les constructeurs définissent des procédures incontournables qui seront exécutées pour créer l'objet. En cas d'héritage, le constructeur du dérivé reçoit l'ensemble des données nécessaires et transmets aux Bases les arguments qu'elles nécessitent.

Ton constructeur :
Produit_Fini(char* marque,float prix,int nb_op,char* op) : Article(code,des,qnt)
Ce constructeur s'attend à recevoir 4 paramètres. Les 3 paramètres additionnels pour Article doivent être reçus et retransmis au constructeur parent.
L'objet est créé par :
Produit_Fini p("BIC",1.200,1,"embalage",100,"stylo",12);
On veut donc transmettre 7 paramètres.

De plus les paramètres passés doivent correspondre à ceux attendus.
char* marque
, pour "BIC" : erreur car
char*
sous-entend que marque sera modifié alors que "BIC" est une chaîne constante. Il faut remplacer
char *marque
par
const char* marque
.
Idem pour op et pour des.
D'où le constructeur à définir :
Produit_Fini(const char* marque,float prix,int nb_op,const char* op,int code,const char* des, int qnt) : Article(code,des,qnt)
1
Nxl Messages postés 1038 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 5 janvier 2017 133
3 févr. 2016 à 10:46
Salut,
Déjà il serait bien de programmer proprement avant qu'on corrige ton code à savoir deux fichier par classe (un h et un cpp) et juste l'instanciation dans le main...
0