Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
828 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [RESOLU][c++] probleme de syntaxe dans un héritage

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU][c++] probleme de syntaxe dans un héritage

n°2108564
helldrum
Posté le 28-10-2011 à 16:54:34  profilanswer
 

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
mood
Publicité
Posté le 28-10-2011 à 16:54:34  profilanswer
 

n°2108609
Joel F
Real men use unique_ptr
Posté le 28-10-2011 à 19:04:51  profilanswer
 

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 :
  1. class quadrilatere
  2. {
  3.     private :
  4.     point coins[4];
  5.    
  6.     public :
  7.     quadrilatere(point const& pa,point const& pb, point const& pc,point const& pd);
  8.    
  9.     void deplacer(int dx,int dy);
  10.     void zoomer(double z);
  11.     void afficher();
  12. };
  13. #include "Cpoint.h"
  14. #include "Cquadri.h"
  15. #include <iostream>
  16. quadrilatere::quadrilatere(point const& pa,point const& pb, point const& pc,point const& pd)
  17. {
  18.   coins[0] = pa;
  19.   coins[1] = pb;
  20.   coins[2] = pc;
  21.   coins[3] = pd;
  22. }
  23. void quadrilatere::deplacer(int dx,int dy)
  24. {
  25.   for(int i=0;i<4;++i) coins[i].deplacer(dx,dy);
  26. }
  27. void quadrilatere::zoomer(double z)
  28. {
  29.   for(int i=0;i<4;++i) coins[i].zoomer(z);
  30. }
  31. void quadrilatere::affiche(std::ostream& os)
  32. {
  33.   for(int i=0;i<4;++i) { coins[i].affiche(os); os << " "; }
  34. }
 

Ensuite pour parallel ton .cpp est foireux, on n'heirte pas des constructeurs de cette facon

 
Code :
  1. class parallelipipede : public quadrilatere
  2.   parallelipipede(const point& a, const point& b, const point& c);
  3. };
  4. #include "Cparallel.h"
  5. parallelipipede::parallelipipede(const point& a, const point& b, const point& c)
  6. : quadrilatere(a,b,c, point(b.x()+c.x()-a.x(),b.y()+c.y()-a.y())
  7. {
  8. }
 

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)


Message édité par Joel F le 28-10-2011 à 19:05:43
n°2108849
helldrum
Posté le 31-10-2011 à 09:45:37  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [RESOLU][c++] probleme de syntaxe dans un héritage

 

Sujets relatifs
Probleme Java + Telnet + Active DirectoryPython + Qt + OpenCV = problème :/
Création d'un livre d'or en PHP : problème de débutant...Problème avec Dewplayer et Blogspot
probléme de synthaxe sur vlookupProblème importation Xampp
Problème avec confirm() et AJAXProblème formulaire ["undefined"]
problème pour ajouter un nombre à une variable (heure UTC et CEST) 
Plus de sujets relatifs à : [RESOLU][c++] probleme de syntaxe dans un héritage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR