[c++] Jak wywołać przeładowanie operatora, z klasy dziedziczonej na obiekcie klasy bazowej
Ostatnio zmodyfikowano 2021-08-25 19:05
00Andre Temat założony przez niniejszego użytkownika |
[c++] Jak wywołać przeładowanie operatora, z klasy dziedziczonej na obiekcie klasy bazowej » 2021-08-24 18:38:51 Witam Mam problem z wywołaniem przeładowanie operatora. #include <iostream> #include <string>
class a { private: int val; public: a() { }; void operator +( unsigned dd ) { val += dd; }; ~a() { }; };
class b : public a { private: std::string valstr; public: b() { }; void operator +( std::string rr ) { valstr = rr; }; ~b() { }; };
int main() { b element_b; element_b + 5; return 0; }
|
|
DejaVu |
» 2021-08-24 19:13:52 |
|
00Andre Temat założony przez niniejszego użytkownika |
» 2021-08-24 19:32:29 Wiem jak działa główne przeładowanie operatora+ w tym linku nie wyjaśnienia problemu mojego.
Musze mieć dwie klasy, jedna klasa ją dziedziczy i musi być tam przeładowanie operatora i musi być używany z klasy bazowej tak jak pokazałem w main.
Jak jest jedno przeładowanie operatora+ działa wszystko ok, ale jeśli są dwa przeładowania operatora+ w klasie bazowej b i dziedziczonej a to jest problem. nawet typedef nie pomaga, ponieważ kompilator nie widzi przeładowania operatora+ z klasy a
i jak oznaczyć aby kompilator wiedział o jakie chodzi przeładowanie operatora |
|
DejaVu |
» 2021-08-24 19:34:55 Dopisz do klasy 'b': void operator +( unsigned dd ) { a::operator +( dd ); };
/edit: 1. Typedef nie ma znaczenia (to po prostu bardziej zgeneralizowany przykład przeciążenia operatora) 2. Jeżeli Twój operator nie zwraca żadnego typu to de-facto wynik działania niczego nie zmienia, więc... mimo wszystko źle przeciążasz operator dodawania. /edit: A jeżeli użycie operatora + powoduje modyfikację stanu obiektu po 'lewej' to z góry prosisz się o kłopoty, bo kod będzie zachowywał się nieintuicyjnie. Przykład: a = 0; a + 1; a + 2; cout << a; Tak więc rozsądniej byłoby użyć operatora +=, aby poprawnie odzwierciedlić Twoje intencje LUB poprawnie zaimplementować operator dodawania. |
|
pekfos |
» 2021-08-25 19:05:55 Ten operator w b jest ukryty, bo masz zadeklarowany drugi, chociaż z innymi argumentami. Żeby wciągnąć wersję z a, dopisz do klasy b: |
|
« 1 » |