Bon, je ne sais pas ce que je fais ici, sinon ce n'est pas correct. Essayer de surcharger la méthode '==' d'une classe, et ça ne marche pas. Au moins, je reçois un faux retour de mon main
, et le cout
dans l'implémentation de '==' ne produit pas.Difficulté pour obtenir la surcharge de l'opérateur '==' au travail (C++)
Ce sont mes trois fichiers:
// TestClass.h
#ifndef TESTCLASS_H
#define TESTCLASS_H
class TestClass {
public:
TestClass(int contents);
TestClass(const TestClass& orig);
virtual ~TestClass();
bool operator==(const TestClass& other);
private:
int contents;
};
#endif /* TESTCLASS_H */
// TestClass.cpp
#include <iostream>
#include "TestClass.h"
TestClass::TestClass(int contents) {
this->contents = contents;
}
TestClass::TestClass(const TestClass& orig) {
this->contents = orig.contents;
}
TestClass::~TestClass() {
}
bool TestClass::operator ==(const TestClass& other) {
std::cout << "COMPARING" << std::endl;
return (contents == other.contents);
}
// Main.cpp
#include <cstdlib>
#include <iostream>
#include "TestClass.h"
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
TestClass* tc = new TestClass(1);
TestClass* tc1 = new TestClass(1);
cout << (tc == tc1) << endl;
return 0;
}
La question est - ce que je fait de mal? Je m'excuse pour ce qui est probablement une erreur très stupide quelque part, mais je ne peux pas le voir.
Vous devriez préférer une liste d'initialisation sur une affectation dans le constructeur, vous n'avez pas besoin de définir le constructeur de copie (encore une fois, utilisez une liste d'initialisation) car celui créé implicitement copiera chaque membre de toute façon, et vous ne devriez pas définir un destructeur vide. – GManNickG
@GMan: +1 sur votre commentaire mais pour sa défense le destructeur est marqué comme virtuel, donc il doit être défini. Que la classe ait vraiment besoin d'un destructeur virtuel est une autre question bien sûr ... :) – Troubadour
Désolé, le destructeur vient d'être généré par netbeans quand j'ai généré automatiquement la classe de test. Ne serait normalement pas là =). – Stephen