Есть ли в C ++ ключевое слово, которое позволяет ссылаться на базовый тип из производного класса? - PullRequest
0 голосов
/ 26 апреля 2018

Для примера:

class some_base
{
 ... // some valid code
};

class derived : public some_base
{
  ...

  derived& operator=( const derived& that )
  {
    some_base::operator=( that );

    ...

    return *this;
}; 

Было бы хорошо, если бы мы могли использовать какое-то ключевое слово в операторе присваивания derived's вместо квалификатора some_base. Компилятор знает тип, от которого мы наследуем, так что, на мой взгляд, это не проблема.

Итак, вопрос в том, предоставляет ли С ++ вспомогательное ключевое слово для упрощения жизни кодера?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Некоторые компиляторы предоставляют ключевое слово базового класса в качестве расширения. Кажется, что варианты названия super являются общими, например, Visual C ++ __super (я ожидаю, что в качестве замены плагина компилятор Intel также поддерживает __super). Но стандарт C ++ не предоставляет такой возможности, хотя когда-то было предложение .

Чтобы добиться примерно того же, просто определите псевдоним типа Base в каждом классе.

В другом потоке пользователь Родди утверждает, что такой псевдоним должен быть private «чтобы избежать проблемы, когда« унаследованное »ошибочно исключено из класса, но подкласс пытается его использовать».

0 голосов
/ 26 апреля 2018

Компилятор знает тип, от которого мы наследуем, так что это не проблема

Если вы не наследуете от нескольких базовых классов - в таком случае, как компилятор решит, какой это класс?

Так что нет, такого ключевого слова нет, все, что вы можете сделать, это вставить его в ваш стандарт кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...