J'ai un peu de mal à utiliser des opérateurs surchargés dans un opérateur déjà surchargé. Dans mon code suivant, j'ai surchargé l'opérateur & & pour comparer deux objets de cours. L'opérateur va à son tour à une fonction qui appelle d'autres opérateurs surchargées pour comparer les variables d'objet privé de cet objet pour les comparer principalement:Surcharge d'un opérateur C++ dans un opérateur déjà surchargé
code:
bool operator&&(const DaysOfWeek& a, const DaysOfWeek& b);
bool operator&&(const TimeInterval& a, const TimeInterval& b);
Maintenant, pour ma question. J'ai utilisé de nombreux opérateurs surchargés dans ce projet, mais c'est la première fois que j'ai dû appeler des opérateurs surchargés à l'intérieur d'autres opérateurs surchargés. Malheureusement, mes opérateurs surchargés dans le code ci-dessus ne sont pas appelés depuis ma fonction isOverlap. Donc ma question est: pourquoi est-ce et comment puis-je le corriger?
Toute aide serait grandement appréciée, car je me tape la tête contre le mur en essayant de faire fonctionner cela. J'ai inclus le code relatif à Course.h et les fonctions et l'opérateur surchargé dans Course.cpp. J'ai mis en gras les lignes de code appropriées pour lesquelles j'ai une sortie irrégulière (n'utilisant pas mon opérateur surchargé).
code:
bool Course::isOverlap(const Course& b) const
{
DaysOfWeek tempDays = b.getDays();
TimeInterval tempTime = b.getTime();
if(this->instructor==b.getInstructor() &&
&this->days&&(&tempDays) &&
&this->time&&(&tempTime))
{
return true;
}
else
return false;
}
bool operator&&(const Course& a, const Course& b)
{
if (a.isOverlap(b))
return true;
else
return false;
}
code:
#ifndef COURSE_H
#define COURSE_H
#include <string>
#include "TimeInterval.h"
#include "DaysOfWeek.h"
using namespace std;
class Course
{
public:
Course();
Course(const string courseCode, const string section,
const DaysOfWeek& days, const TimeInterval& time,
const string instructor);
void setCourse(string courseCode, string section,
DaysOfWeek& days, TimeInterval& time, string instructor);
string getCourse() const;
string getSection() const;
DaysOfWeek getDays() const;
TimeInterval getTime() const;
string getInstructor() const;
bool isOverlap(const Course& b) const;
bool isMatch(const Course& b) const;
private:
string courseCode;
string section;
DaysOfWeek days;
TimeInterval time;
string instructor;
};
bool operator&&(const Course& a, const Course& b);
bool operator==(const Course& a, const Course& b);
#endif //COURSE_H
J'ai aussi essayé de remplacer le code que j'ai avec:
bool Course::isOverlap(const Course& b) const
{
DaysOfWeek tempDays = b.getDays();
TimeInterval tempTime = b.getTime();
if(instructor==b.getInstructor() &&
days && tempDays &&
time && tempTime)
{
return true;
}
else
return false;
}
Comme un ami a suggéré, mais ce n » t même compiler (ne correspond pas aux arguments de la surcharge & & opérateur).
Vous ne voulez vraiment pas surcharger l'opérateur '&&'. Voulez-vous surcharger '==', peut-être? –
Non, je veux dire &&. Pour une affectation, je dois utiliser && pour tester le chevauchement. == pour une correspondance exacte. – Aurum