surcharge operator=, héritage et fonction virtuelle pure
Le code suivant précise dans la classe mère que l'operateur '=' doit être surchargé dans la classe fille. Or dès utilisation dans le main, il semblerait que l'aspect 'virtuel' de la surcharge ne fonctionne pas et qu'il cherche à appeller l'opérateur de la classe mère (non implémenté) plutôt que sa ré-écriture dans la classe fille !
Bref, je comprend vraiment pas là ou j'ai faux :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <cstdlib>
#include <cstdio>
#include <ctime>
class a {
public:
a();
//virtual a& operator=(const a &ref) = 0;
virtual a& set(const a &ref) = 0;
void print() const;
protected:
int x;
};
class b : public a{
public:
//a& operator=(const a &ref);
a& set(const a &ref);
};
a::a() {
srand(time(NULL));
x = rand();
}
void a::print() const {
printf("x = %d\n", x);
}
/*
a& b::operator=(const a &ref) {
x = dynamic_cast<const b*>(&ref)->x;
return *this;
}
*/
a& b::set(const a &ref) {
x = dynamic_cast<const b*>(&ref)->x;
return *this;
}
int main() {
b x, y;
x.print();
//y = x;
y.set(x);
y.print();
return 0;
} |
Message d'erreur lors de l'édition de liens :
Citation:
main.o:main.cpp: (.text$_ZN1baSERKS_[b::operator=(b const&)]+0x14): undefined reference to `a::operator=(a const&)'
collect2: ld returned 1 exit status
Si j'utilise à la place de l'opérateur '=', la fonction 'set' la compilation passe bien.