Подтвердить что ты не робот

С++ эквивалент "супер"?

В Java вместо использования оператора scope используется super: ex/

C++ -> GenericBase::SomeVirtualFunction();
Java -> super.someVirtualMethod();

Есть ли что-то подобное в С++ или это не имеет смысла в С++ из-за множественного наследования?

Спасибо

4b9b3361

Ответ 2

Компиляторы Microsoft имеют (отклоненные стандартным коммитом С++) расширение __ super.

Изменить: Super может запутать читателей кода. Из-за множественного наследования в С++ лучше быть более явным. Множественное наследование уже сложно. Была дискуссия AFAIK о полезности супер для шаблонов, которые успокоились после того, как было осознано, что любой может typedef супер, если он в ней нуждается.

Ответ 3

Тройка typedef в ссылке Мартина работает довольно хорошо (и эта частичная причина, почему С++ не имеет супер или унаследованного ключевого слова AFAIR.) Единственное, что нам нужно заботиться, это то, что typedef должен находиться в частной секции. Не помещайте его в защищенный или открытый раздел, иначе производный класс может ошибочно использовать typedef для ссылки на своего дедушки и бабушки, а не на своего родителя.

Ответ 4

В С++ нет такой вещи, хотя вы можете предоставить свой собственный typedef:

struct Derived : Base
{
    typedef Base super;
};