EgoRusMarch
@EgoRusMarch

Наследование. Каким образом вызывается operator=() через оператор разрешения контекста?

Читал про наследование с динамическим выделением памяти одновременно: и в производном, и в базовом классах. И есть такая штука в примере с определением operator=() производного класса:
BaseClass::operator=(derived_reference);
Как так? Ведь operator=() - не статический метод, а значит его вызывать можно только через объект. Ниже написано, что это почти равнозначно следующему:
*this = derived_reference;
Только в этом случае будет рекурсивный вызов, т.к. будет преобразовано в:
DerivedClass::operator=(derived_reference);
Это такая особенность, созданная для наследования, или как? Ведь по правилам, на сколько я знаю, так делать никак нельзя.
  • Вопрос задан
  • 71 просмотр
Решения вопроса 2
maaGames
@maaGames
Погроммирую программы
Это не вызов статического метода, а явное указание того, какую реализацию использовать (не полиморфно, будет вызванная именн офункция для указанного класса). Рекомендую почитать про множественное наследование, там может станет чуть понятнее. Например, если класс С унаследован от А и B, и в них обоих есть переменная var, то нужно будет писать A::var и B::var, чтобы пояснить, какая из них исползьуется.
Ответ написан
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Ведь operator=() - не статический метод, а значит его вызывать можно только через объект.

Если делать это внутри другого не-статического метода, то можно, объектом будет *this.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
igooods Санкт-Петербург
от 120 000 до 180 000 ₽
МТС Москва
от 140 000 до 250 000 ₽
РГСофт Логистика Новосибирск
от 100 000 до 120 000 ₽