Philip Masse Chocapiiic | Bonsoir tout le monde,
j'ai une classe Fraction (qui fait partie d'un package Maths) que j'ai du passer en Template, maintenant elle s'appelle FractionG
Alors j'ai normalement fait toute les modification adéquate mais le test unitaire de mes surcharges =, ==, != ne fonctionne pas (en prenant l'exemple sur ma MatriceG).
Sinon pour les comparaisons sur des entiers je n'ai pas d'erreur mais il me sort "template class has already been defined" au build
PS : le code qui ne fonctionne pas est en commentaire.
voici le code FractionG_2.cpp :
Code :
- //
- // IUT de Nice / Departement informatique / Module APO-C++
- // Annee 2009_2010 - Feuille_6
- //
- // Classe FractionG : Surcharge opérateurs =, ==, !=
- //
- // Auteurs : C. Mus & S. Funel
- //
- #ifndef _FractionG
- #include "FractionG.h"
- #endif
- // --- Surcharge de l'opérateur = avec une FractionG
- //
- template <class G>
- FractionG <G> &FractionG <G>::operator =(const FractionG& f) {
- m_numerateur= f.m_numerateur ;
- m_denominateur= f.m_denominateur ;
- return *this ;
- }
- // --- Surcharge de l'opérateur = avec un entier
- //
- template <class G>
- FractionG <G> &FractionG <G>::operator =(int op) {
- m_numerateur= op ;
- m_denominateur= 1 ;
- return *this ;
- }
- // --- Surcharge de l'opérateur == comparaison entre deux FractionGs
- //
- template <class G>
- bool FractionG <G>::operator ==(const FractionG& f) {
- // Controler les produits croisés
- //
- return numerateur()*f.denominateur() == f.numerateur()*denominateur(); // Edit, Erreur corrigé
- }
- // --- Surcharge de l'opérateur == comparaison entre une FractionG et un entier
- //
- template <class G>
- bool FractionG <G>::operator ==(int op) {
- // Controler le produit croise
- //
- return numerateur() == op*denominateur();
- }
- // --- Surcharge de l'opérateur != comparaison entre deux FractionGs
- //
- template <class G>
- bool FractionG <G>::operator !=(const FractionG& f) {
- // Controler le produit croise
- //
- return numerateur()*f.denominateur() != f.numerateur()*denominateur();
- }
- // --- Surcharge de l'opérateur != comparaison entre une FractionG et un entier
- //
- template <class G>
- bool FractionG <G>::operator !=(int op) {
- // Controler le produit croise
- //
- return numerateur() != op*denominateur();
- }
|
Et voici mon test unitaire :
Code :
- //
- // IUT de Nice / Departement informatique / Module APO-C++
- // Annee 2009_2010 - Package _Maths
- //
- // Classe FractionG - Tests unitaires des operateurs == et !=
- // (cas nominaux)
- //
- // Auteur : S. Funel & C. Mus
- //
- #ifndef _FractionG_
- #include "..\_SRC\FractionG.h"
- #endif
- #include "..\_SRC\FractionG.cpp"
- #include "..\_SRC\FractionG_2.cpp"
- #include "T:\_Tests\Tests\Tests.h"
- void main () {
- Tests::Begin("_Maths.FractionG", "2.0.0" );
- Tests::Design("Controle des operateurs (Premiere partie)", 3);
- /*Tests::Case("Operateur == : comparaison de deux FractionG" ); {
-
- FractionG f1(3,3);
- Fraction f2(5), f3(-3), f4(6);
- int f5(2,1), f6(12,6), f7(3,1), f8(-3,1);
- int f9(10,5), f10(-10,-5);
-
- Tests::Unit(0, f1==f2);
- Tests::Unit(1, f3==f4);
- Tests::Unit(1, f5==f6);
- Tests::Unit(0, f7==f8);
- Tests::Unit(0, f9==f10);
- Tests::Unit(1, f2==f9);
- }*/
- Tests::Case("Operateur == : comparaison avec un entier" ); {
- int f1(2), f2(-2), f3(0), f4(0);
- Tests::Unit(1, f1==2);
- Tests::Unit(1, f2==-2);
- Tests::Unit(1, f3==0);
- Tests::Unit(0, f4==-1);
- }
- /*Tests::Case("Operateur != : comparaison de deux FractionGs" ); {
- int f1(2), f2(7), f3(-2), f4(2);
- int f5(2), f6(-4), f7(1), f8(1);
-
- Tests::Unit(1, f1!=f2);
- Tests::Unit(1, f3!=f4);
- Tests::Unit(0, f4!=f5);
- Tests::Unit(1, f5!=f6);
- Tests::Unit(0, f7!=f8);
- }*/
-
- Tests::Case("Operateur != : comparaison avec un entier" ); {
- int f1(2), f2(4), f3(-1), f4(-1);
- Tests::Unit(0, f1!=2);
- Tests::Unit(1, f2!=-2);
- Tests::Unit(1, f3!=0);
- Tests::Unit(0, f4!=-1);
- }
- Tests::Design("Controle des operateurs (Deuxieme partie)", 3);
- /*Tests::Case("Operateur = : cas de deux FractionGs" ); {
- FractionG& <FractionG> f1(2,3), f2(5,4);
- FractionG& <FractionG> f(0);
-
- f=f1; Tests::Unit(1, f==f1);
- Tests::Unit(0, f==f2);
- f1=f2; Tests::Unit(0, f1==f);
- Tests::Unit(1, f1==f2);
- }
-
- Tests::Case("Operateur = : cas d'un entier" ); {
- FractionG& <FractionG> f(-1);
-
- f=0; Tests::Unit(0, f==1);
- Tests::Unit(1, f==0);
- Tests::Unit(1, f==-0);
- f=7; Tests::Unit(0, f==0);
- Tests::Unit(1, f==7);
- }
- */
- Tests::End();
- }
|
Merci beaucoup d'avance.
Philip Masse Message édité par Philip Masse le 09-12-2009 à 09:42:39
|