Cześć,
napisałem w miarę możliwie najkrótszy program, żeby przedstawić w czym tkwi szkopuł :)
W zasadzie to problemu nie ma ponieważ wszystko działa, tylko nie rozumiem pewnej różnicy w instrukcjach:
(*this).A::operator=(objB);
this->A::operator=(objB);
W książce Pana Grębosza w dziale dziedziczenie wskazane są przykłady użycia operatorów przypisania w przypadku dziedziczenia klas. Pan Grębosz proponuje trzy rozwiązania, w tym jedno jest przez użycie (*this).
Natomiast ten sam efekt osiągnąłem bardziej prostą metodą, poprzez standardowe potraktowanie this jako wskaźnika na obiekt, dla którego wywoływana jest funkcja.
Czy są jednak w tym jakieś tajemne różnice, o których nie wiem?
#include <iostream>
class A {
public:
A () : name("Anakonda"){};
std::string name;
A& operator=(A& objA)
{
std::cout << "Działa operator przypisania klasy A" << std::endl;
this->name = "Copy of " + objA.name;
return *this;
}
};
class B : A {
public:
std::string surname;
B () : surname("Boa"){};
B& operator=(B& objB)
{
std::cout << "Działa operator przypisania klasy B" << std::endl;
this->surname = "Copy of " + objB.surname;
//(*this).A::operator=(objB);
this->A::operator=(objB);
return *this;
}
void view () {
std::cout << this->name << " " << this->surname << std::endl;
}
};
int main () {
B Boa;
B Boazeria;
std::cout << "Boa:" << std::endl;
Boa.view();
std::cout << "Boazeria:" << std::endl;
Boazeria.view();
std::cout << std::string (50, '*') << std::endl;
Boazeria = Boa;
std::cout << "Boa:" << std::endl;
Boa.view();
std::cout << "Boazeria:" << std::endl;
Boazeria.view();
return 0;
}