Constructeur
Fermé
Marina
-
16 janv. 2013 à 18:02
patcartier Messages postés 63 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 27 novembre 2013 - 16 janv. 2013 à 23:44
patcartier Messages postés 63 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 27 novembre 2013 - 16 janv. 2013 à 23:44
9 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
16 janv. 2013 à 18:30
16 janv. 2013 à 18:30
Tu dois utiliser des méthodes d'accès (get/set) pour modifier le nom :
Exemple complet :
Exemple complet :
#include <iostream> #include <string> class Avion { protected: std::string nom; public: inline Avion() { nom="_default_"; } inline Avion(std::string str) { nom=str; } inline void setNom(std::string nouveau) { nom = nouveau; } inline std::string getNom() { return nom; } }; int main() { Avion v; std::cout << v.getNom() << std::endl; v.setNom("boeing"); std::cout << v.getNom() << std::endl; v.setNom("airbus"); std::cout << v.getNom() << std::endl; return 0; }
Bonjour, non mon main est simplement celui ci:
A l'exécution j'ai ceci sur la sortie standard:
Avion allumé
Avion jet allumé
Donc je fais 2 constructeurs avec des cout << dedans?
merci
int main(void) { Avion v; Avion v1("jet"); }
A l'exécution j'ai ceci sur la sortie standard:
Avion allumé
Avion jet allumé
Donc je fais 2 constructeurs avec des cout << dedans?
merci
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
16 janv. 2013 à 18:47
16 janv. 2013 à 18:47
Il n'y a aucune raison de mettre des cout dans un constructeur. Ça peut bien sûr être utile pour le débogage mais ce n'est pas une fin en soit...
Si tu ne passes pas le nom en paramètre, soit tu utilises un nom par défaut, soit il faut que tu le définisses après coup avec une méthode... Mais ton main n'est clairement pas suffisant !
Si tu ne passes pas le nom en paramètre, soit tu utilises un nom par défaut, soit il faut que tu le définisses après coup avec une méthode... Mais ton main n'est clairement pas suffisant !
C'est un exercice que je fais et donc qu'on m'impose, rien ne marche, je te montre mon code, je re précise que le main reste inchangé c'est obligatoire:
Et donc avec ça j'ai tjs l'erreur au compilateur: no machting function for call Avion:Avion()..c'est du au fait que dans le main j'ai Avion v et que je passe aucun argument (pas de parenthèse), comment résoudre ça?
int main(void) { Avion v; Avion v1("jet"); return 0 }
class avion { private: std::string name; public: Avion(std::string name); ~Avion(); }
Et donc avec ça j'ai tjs l'erreur au compilateur: no machting function for call Avion:Avion()..c'est du au fait que dans le main j'ai Avion v et que je passe aucun argument (pas de parenthèse), comment résoudre ça?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
16 janv. 2013 à 19:00
16 janv. 2013 à 19:00
Tu dois faire comme je l'ai fait, c'est à dire définir un constructeur sans argument...
mais si je fais comme tu dis j'aurais tjs un message d'erreur à cause du second appel Avion v1("jet") car je DOIS passer le nom en paramètre mais je dois aussi pour l'appeler SANS paramètre avec une chaine vide par défaut, donc je suis bloquée...
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
16 janv. 2013 à 19:07
16 janv. 2013 à 19:07
En quoi tu es bloquée !?
Regarde mon code, en remplaçant mon main par le tien, ça marche très bien, donc ce que j'ai fait répond à ton problème, alors analyses tout ça !
Regarde mon code, en remplaçant mon main par le tien, ça marche très bien, donc ce que j'ai fait répond à ton problème, alors analyses tout ça !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tu utilises le mot inline, je ne l'ai jamais vu...n'y a t'il aucun autre moyen plus simple de faire?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
16 janv. 2013 à 19:22
16 janv. 2013 à 19:22
Tu peux l'enlever, ça fonctionnera quand même.
non ça ne marche pas tu écris des fonctions annexes, donc je repose ma question, comment avoir mon résultat avec mon main, 2 constructeurs? Je ne dois pas écrire de get ou autre...
je suis désolée mais ta méthode ne marche pas avec mon main KK je viens d'essayer :(...
Absolument rien ne marche, je te montre tout monde code, le main DOIT RESTER INCHANGé:
main.cpp:
avion.hh:
avion.cpp
Que dois je ajouter dans mon avion cpp et avion.hh pour que le premier appel du main, donc Avion v; fonctionne...
Absolument rien ne marche, je te montre tout monde code, le main DOIT RESTER INCHANGé:
main.cpp:
int main(void) { Avion v; Avion v1("jet"); return 0 }
avion.hh:
class avion { private: std::string name; public: Avion(std::string name); ~Avion(); }
avion.cpp
Avion::Avion(std::string name) { std::cout << "Avion" << this->name << "allumé" << std::endl; }
Que dois je ajouter dans mon avion cpp et avion.hh pour que le premier appel du main, donc Avion v; fonctionne...
patcartier
Messages postés
63
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
27 novembre 2013
31
16 janv. 2013 à 23:44
16 janv. 2013 à 23:44
moi, je dirais juste qu'il te manque un constructeur simple dans ton . h :
Avion();
et dans ton .cpp :
Avion::Avion()
{}
car t'en as un sans argument et l'autre avec.
donc, un sans string et l'autre avec un string.
Avion();
et dans ton .cpp :
Avion::Avion()
{}
car t'en as un sans argument et l'autre avec.
donc, un sans string et l'autre avec un string.