probleme de syntaxe dans un héritage [RESOLU][c++] - C++ - Programmation
Marsh Posté le 28-10-2011 à 19:04:51
Ouach, y a pas mal de truc a reprendre.
- Pourquoi quadri a t il des pointeurs vers des Point ? Des membres normaux suffisent on est pas en JAVA
- Il serait de bon ton de conserver un bon niveau d'abstraction et de passer des point a quadri
- en general les methodes sont des verbes
- ta methode affiche devrait prendre une reference vers un flux plutot qu'utilsier cout
Code :
|
Ensuite pour parallel ton .cpp est foireux, on n'heirte pas des constructeurs de cette facon
Code :
|
Evidemment, ici je prend le partie que point a des .x(), .y() afficehr etc
coherent.
Ensuite, faire heritez Parall de Quadri ets en general une mauvaise idee car tu viole
le principe de substitution de lytskov (goto google)
Marsh Posté le 31-10-2011 à 09:45:37
Merci pour ta réponse ! Je débute en c++ donc pardon pour le bazars incohérent .Ce qui me laisse à penser qu'on apprend vraiment n'importe quoi cette année et que je vais droit dans le mur . Je vais tacher de comprendre tes explications .Merci pour ta franchise et pour avoir pris le temps de me répondre .Bonne continuation
Marsh Posté le 28-10-2011 à 16:54:34
bonjours à tous !
j'ai un programme super méga trop cool et intéressant a codé d'ici la fin des vacances qui me pose des problèmes d'héritage .(non personne n'est mort chez moi rappelez les notaires ^^) bref .
le sujet :
pour faire simple il s'agit de créer un classe point qui manipule des coordonnées x et y .(rien de graphique c'est des nombres)
avec plusieurs méthodes
déplacer
zoomer
afficher les coordonnées
ensuite il faut créer les classes Cquadri Cparallelogramme Crectangle et Ccarre qui hérite chacun des classes d'avant .
sachant que toutes les classe utilise les mêmes méthodes seul les constructeurs sont différents .
je vous épargne les détails sinon je vous fait un MASTER_PAVE_DE_CENT_KILOMETRES_DE_LONG
mon problème est le suivant; Je doit réécrire le constructeur par défaut des classes héritées.
avec comme seul explication :
il faudra utiliser une syntaxe de la forme Cfille:Cfille(paramètres du constructeur):Cmere(paramètre du constructeur) {}
les paramètres du constructeurs de la classe parente Cmere devront être calculés dans la parenthèse à partir de ceux de la classe fille .
tout ceci découpé en plusieurs fichiers 1 header et 1 cpp par classe
la class Cquadri
(Cquadri.h)
class Cquadri{
private :
Cpoint *qA;
Cpoint *qB;
Cpoint *qC;
Cpoint *qD;
public :
Cquadri(int xa,int ya,int xb,int yb,int xc,int yc,int xd,int yd);
void deplace(int dx,int dy);
void zoom(double z);
void affiche();
};
Cquadri.cpp
#include "Cpoint.h"
#include "Cquadri.h"
#include <iostream>
Cquadri::Cquadri(int xa,int ya,int xb,int yb,int xc,int yc,int xd,int yd){
this->qA = new Cpoint(xa,ya);
this->qB = new Cpoint(xb,yb);
this->qC = new Cpoint(xc,yc);
this->qD = new Cpoint(xd,yd);
}
void Cquadri::deplace (int dx,int dy){
qA->deplace(dx,dy);
qB->deplace(dx,dy);
qC->deplace(dx,dy);
qD->deplace(dx,dy);
}
void Cquadri::zoom(double z){
qA->zoom(z);
qB->zoom(z);
qC->zoom(z);
qD->zoom(z);
}
void Cquadri::affiche(){
std::cout<<"Point A";
qA->affiche();
std::cout<<"Point B";
qB->affiche();
std::cout<<"Point C";
qC->affiche();
std::cout<<"Point D";
qD->affiche();
std::cout<<std::endl;
}
Cparallel.h
class Cparallel : public Cquadri {
Cparallel::Cparallel(int xa,int ya,int xb,int yb,int xc,int yc):quadri(int xa,int ya,int xb,int yb,int xc,int yc,int xd =xb+xc-xa,int yd =yb+yc-ya);
};
Cparallele.cpp
#include "Cparallel.h"
Cparallel(xa,ya,xb,yb,xc,yc):public Cquadri(xa,ya,xb,yb,xc,yc,xd =xb+xc-xa,yd =yb+yc-ya){
}
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|erreur: expected class-name before ‘{’ token|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: extra qualification ‘Cparallel::’ on member ‘Cparallel’ [-fpermissive]|
/home/jonathan/PROJET/Cpoint/Cparallel.h||In constructor ‘Cparallel::Cparallel(int, int, int, int, int, int)’:|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: class ‘Cparallel’ does not have any field named ‘quadri’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected primary-expression before ‘int’|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|erreur: expected ‘{’ at end of input|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|erreur: expected ‘)’ before ‘,’ token|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|erreur: no matching function for call to ‘Cparallel::Cparallel()’|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|note: candidates are:|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: Cparallel::Cparallel(int, int, int, int, int, int)|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: candidate expects 6 arguments, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: Cparallel::Cparallel(const Cparallel& )|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: candidate expects 1 argument, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|erreur: no matching function for call to ‘Cparallel::Cparallel()’|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|note: candidates are:|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: Cparallel::Cparallel(int, int, int, int, int, int)|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: candidate expects 6 arguments, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: Cparallel::Cparallel(const Cparallel& )|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: candidate expects 1 argument, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|erreur: no matching function for call to ‘Cparallel::Cparallel()’|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|note: candidates are:|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: Cparallel::Cparallel(int, int, int, int, int, int)|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: candidate expects 6 arguments, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: Cparallel::Cparallel(const Cparallel& )|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: candidate expects 1 argument, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|erreur: no matching function for call to ‘Cparallel::Cparallel()’|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|note: candidates are:|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: Cparallel::Cparallel(int, int, int, int, int, int)|
/home/jonathan/PROJET/Cpoint/Cparallel.h|3|note: candidate expects 6 arguments, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: Cparallel::Cparallel(const Cparallel& )|
/home/jonathan/PROJET/Cpoint/Cparallel.h|1|note: candidate expects 1 argument, 0 provided|
/home/jonathan/PROJET/Cpoint/Cparallel.cpp|2|erreur: expected initializer before ‘)’ token|
||=== Build finished: 38 errors, 0 warnings ===|
la class Cquadri fonction et Cpoint aussi je ne l'est pas mise pour ne pas surcharger .
il semblerai que la class Cquadri ne soit pas trouvée par Cparallel.
merci d'avance pour votre aide et pardon pour le méga pavé ^^
edit:
J'oubliai quelques menu détail je travail avec codeblocks 10.5 sous ubuntu 11.10
ha ouai et la première partie du sujet c'était la même chose avec des compositions .... je vous épargne le code parceque la encore y'a du super pavé .... je le posterai au besoin .
Message édité par helldrum le 01-11-2011 à 14:01:05