Accueil > Forum > > > > POO: classe et heritage
POO: classe et heritage
samedi 19 février 2011 à 14:30:46 |
POO: classe et heritage

eishtein
|
bonjour les gars;
Bon voilà, j'ai les deux classes suivantes:
Code C/C++ :
class fraction
{
public:
fraction(int=0,int=1);
fraction(double&);
int pgcd(int,int);
fraction operator+=(fraction);
fraction operator-=(fraction);
fraction operator*=(fraction);
bool operator==(fraction);
int num();
int den();
void afficher();
protected:
int a,b;
void reduire();
};
class intfract: public fraction
{
public:
intfract(int=0);
intfract(int=0,int=0,int=0);
intfract(fraction);
intfract& operator+=(intfract&);
void aff();
protected:
int Pint;
};
malgré le fait que j'ai déclaré les champs de la classe de base comme étant de type protected, le compilateur me génère un message d'erreur comme quoi selon ce contexte on peut pas les manipuler. je vous serais donc très reconnaissant si vous m'aider à résoudre ce problème;
ET MERCI D'AVANCE
eishtein;
|
|
samedi 19 février 2011 à 15:47:25 |
Re : POO: classe et heritage

CptPingu
|
intfract(int=0);
intfract(int=0,int=0,int=0);
Dangereux ça. Si je fais "new intfract", laquelle des deux méthodes est appelée ?
Pourquoi avoir une méthode aff() alors que tu as une méthode affichage() au dessus ?
Quelle est l'intérêt de créer une classe fraction ?
Si c'est juste le type qui doit changer, alors l'héritage n'est pas du tout adapté, c'est un template qu'il te faut.
Techniquement, j'ai besoin que tu postes plus de code, pour pouvoir te résoudre l'erreur de compilation.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
samedi 19 février 2011 à 20:10:14 |
Re : POO: classe et heritage

eishtein
|
merci pour la réponse;
ben en fait l'idée c'est de créer une classe 'intfract' représentant un nombre sous la forme suivante :"1 '1/2' [UN ET DEMI]". c pour çà que j'ai créé une classe intfract dérivée de la classe 'fraction' . En ce qui concerne les constructeurs de la classe intfract , j'en ai créé 3 pour la simple raison qu'il existe trois cas:
-->le premier cas : on peut initialiser via le constructeur avec uniquement la partie entiere 'Pint'.
-->le deuxieme cas : on peut initialiser via le constructeur avec la partie entière et la partie fraction.
-->le troisieme cas : on peut initialiser via le constructeur rien qu'avec la partie fraction.
ENFIN , pour la methode affichage, si je n'utilise que la methode afficher de la classe fraction, la partie entière ne s'affichera pas, d'où l'intérêt de la methode 'aff()'.
voici le code des definition au cas où il peut vous etre utile:
[code=cpp]
#include <iostream>
#include <math.h>
#include "fraction.h"
using namespace std;
fraction::fraction(int x,int y)
{
a=x;
b=y;
}
fraction::fraction(double &x0)
{
double epsilon=fabs(x0/1e2);
a=(int)x0;
b=1;
while(fabs(a-x0)>epsilon)
{
x0*=
|
|
samedi 19 février 2011 à 20:27:15 |
Re : POO: classe et heritage

eishtein
|
merci pour la réponse;
ben en fait l'idée c'est de créer une classe 'intfract' représentant un nombre sous la forme suivante :"1 '1/2' [UN ET DEMI]". c pour çà que j'ai créé une classe intfract dérivée de la classe 'fraction' . En ce qui concerne les constructeurs de la classe intfract , j'en ai créé 3 pour la simple raison qu'il existe trois cas:
-->le premier cas : on peut initialiser via le constructeur avec uniquement la partie entiere 'Pint'.
-->le deuxieme cas : on peut initialiser via le constructeur avec la partie entière et la partie fraction.
-->le troisieme cas : on peut initialiser via le constructeur rien qu'avec la partie fraction.
ENFIN , pour la methode affichage, si je n'utilise que la methode afficher de la classe fraction, la partie entière ne s'affichera pas, d'où l'intérêt de la methode 'aff()'.
voici le code des definition au cas où il peut vous etre utile:
[code=cpp]
#include <iostream>
#include <math.h>
#include "fraction.h"
using namespace std;
fraction::fraction(int x,int y)
{
a=x;
b=y;
}
fraction::fraction(double &x0)
{
double epsilon=fabs(x0/1e2);
a=(int)x0;
b=1;
while(fabs(a-x0)>epsilon)
{
x0*=
|
|
samedi 19 février 2011 à 20:36:47 |
Re : POO: classe et heritage

eishtein
|
merci pour la réponse;
ben en fait l'idée c'est de créer une classe 'intfract' représentant un nombre sous la forme suivante :"1 '1/2' [UN ET DEMI]". c pour çà que j'ai créé une classe intfract dérivée de la classe 'fraction' . En ce qui concerne les constructeurs de la classe intfract , j'en ai créé 3 pour la simple raison qu'il existe trois cas:
-->le premier cas : on peut initialiser via le constructeur avec uniquement la partie entiere 'Pint'.
-->le deuxieme cas : on peut initialiser via le constructeur avec la partie entière et la partie fraction.
-->le troisieme cas : on peut initialiser via le constructeur rien qu'avec la partie fraction.%
|
|
lundi 21 février 2011 à 10:25:44 |
Re : POO: classe et heritage

CptPingu
|
Évite les "using namespace", voir: [ Lien ]
Beaucoup d'erreur de conception:
- L'héritage n'est pas justifié, une "fraction" et une "fraction entière" ne diffère que par le type, pas par un concept d'héritage.
- Si tu fais un héritage, affichage() devrait être redéfinit, et non réécrit sous un autre nom (mot clé virtual).
- Si tu mets des arguments en protected, tu dois pouvoir les utiliser dans la classe fille, sans souci. Poste moi l'ensemble de ton code, et l'erreur exacte. Parce que là, je ne vois pas.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
lundi 21 février 2011 à 11:07:01 |
Re : POO: classe et heritage

CptPingu
|
Voici un petit exemple pour étayer mes dires:
Code C/C++ :
#include <iostream>
#include <sstream>
template <typename T>
class Complex
{
public:
Complex();
Complex(T real);
Complex(T real, T img);
Complex<T> operator*(const Complex<T>& image) const
{
return Complex<T>(_real * image._real - _img * image._img,
_real * image._img + _img * image._real);
}
T real() const;
T img() const;
void display(std::ostream& out) const;
private:
T _real;
T _img;
};
template <typename T>
std::ostream& operator<<(std::ostream& out, const Complex<T>& imag);
template <typename T>
Complex<T>::Complex()
: _real(0), _img(0)
{
}
template <typename T>
Complex<T>::Complex(T real)
: _real(real), _img(0)
{
}
template <typename T>
Complex<T>::Complex(T real, T img)
: _real(real), _img(img)
{
}
template <typename T>
void Complex<T>::display(std::ostream& out) const
{
out << _real << " + " << _img << "i";
}
template <typename T>
T Complex<T>::real() const
{
return _real;
}
template <typename T>
T Complex<T>::img() const
{
return _img;
}
template <typename T>
std::ostream& operator<<(std::ostream& out, const Complex<T>& imag)
{
imag.display(out);
return out;
}
template <typename T>
class Fraction
{
public:
Fraction();
Fraction(T num);
Fraction(T num, T den);
Fraction(const Fraction<T>& frac);
Fraction<T> operator*(const Fraction<T>& frac) const;
void display(std::ostream& out) const;
private:
T _num;
T _den;
};
template <typename T>
std::ostream& operator<<(std::ostream& out, const Fraction<T>& imag);
template <typename T>
Fraction<T>::Fraction()
: _num(0), _den(1)
{
}
template <typename T>
Fraction<T>::Fraction(T num)
: _num(num), _den(1)
{
}
template <typename T>
Fraction<T>::Fraction(T num, T den)
: _num(num), _den(den)
{
}
template <typename T>
Fraction<T>::Fraction(const Fraction<T>& frac)
: _num(frac._num), _den(frac._den)
{
}
template <typename T>
Fraction<T> Fraction<T>::operator*(const Fraction<T>& frac) const
{
return Fraction<T>(_num * frac._num, _den * frac._den);
}
template <typename T>
void Fraction<T>::display(std::ostream& out) const
{
out << _num << "/" << _den;
}
template <typename T>
std::ostream& operator<<(std::ostream& out, const Fraction<T>& imag)
{
imag.display(out);
return out;
}
int main()
{
Complex<int> im(4, 5);
std::cout << im << std::endl;
{
Fraction<int> f(5, 6);
Fraction<int> g(5, 2);
Fraction<int> h = f * g;
std::cout << f << std::endl
<< g << std::endl
<< h << std::endl;
}
{
Fraction<double> f(5.5, 6.6);
Fraction<double> g(5.5, 2.2);
Fraction<double> h = f * g;
std::cout << f << std::endl
<< g << std::endl
<< h << std::endl;
}
{
Fraction<Complex<int> > f(Complex<int>(5, 6), Complex<int>(6, 8));
Fraction<Complex<int> > g(Complex<int>(8, 10), Complex<int>(78, 2));
Fraction<Complex<int> > h = f * g;
std::cout << f << std::endl
<< g << std::endl
<< h << std::endl;
}
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
Cette discussion est classée dans : int, classe, fraction, operator, intfract
Répondre à ce message
Sujets en rapport avec ce message
Matrice constante. [ par nsoualem ]
j'ai crée une classe matrice avec un constructeurdu type:matrice(int nbligne,int nbcolonne)...elle marche a merveille!!!Lors de la création d'un code,
simplifier une fraction ( débutant ) !!! [ par myogtha ]
#include int main (){int denominateur,mulfac1,mulfac2,facmul1,facmul2,facmulfinal;int a,b,c,d;coutcin>>a;coutcin>>
Pointeur vers une fonction dans une classe ... [ par MoDDiB ]
Supposons que j'ai la fonctionvoid Fonction(int test,int t);appartenant a la classe Cclass.Quelle est la syntaxe pour creer un pointeur vers cette fon
Prob avec "!" [ par saturne_1606 ]
Bonjour a tous!Voila, mon prob est que g créer une classe qui permet de manipuler des ensembles d'entier. Et là, g une fonction membre qui vérifie si
Definition d'une classe membre d'une autre classe [ par raidentr ]
Je veux définir une classe membre d'une atre classe, est ce que c'est possible ? Exemple :class voiture{public : char marque[128]; int annee; class co
C++ : Appel d'un autre constructeur de la classe [ par ymca2003 ]
Salut, j'ai un petit problème pour appeler un autre constructeur d'une classe. Ex :// constructeur 1CMyClass::CMyClass(int x, int y){...}// constructe
problème Win32 Api [ par Toadstool ]
J'ai Visual C++ 6 Introductory Edition et j'ai programmé une classe censée représenter une fenetre mais quand dans le constructeur de la classe j'ecri
Import DLL ? [ par DeAtHCrAsH ]
J'ai une DLL dans laquelle j'ai crée une classe.J'aimerai maintenant importer la classe dans mon executable de maniere dynamique ?Ma classe est défini
Comment utiliser les classes avec les boites de dialogue ? [ par alain34270 ]
Bonjour,j'ai écrit une classe qui contient une boite de dialogue.Je veux utiliser la fonction DialogBox pour afficher ma boite de dialogue, associée à
Probleme avec les threads en C++ sour linux [ par benjamvs ]
Bonjour,j'ai le probleme suivant a regler en C++je travaille sur les threads sous linux, avec la librairie "pthread"Lorsque je crée un thread, celui c
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|