[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 » |