ключевое слово "base" для для доступа к членам базового класса

Андрей Уланов
Андрей Уланов

В языках Java и C# есть ключевое слово "base" для доступа к членам базового класса.  В C++ этому мешает множественное наследование. Тем не менее задача актуальна, так как:
1) позволяет сделать код лаконичнее
2) избавляет от следующих ошибок:

пусть D изначально наследовался от B

class B

{

virtual void show();

}

 

class D : public B

{

void show()

{

  B::show();

}

}

 

затем в процессе разработки был добавлен следующий класс

class B2 : public B

{

virtual void show()

{

  B::show();

}

}

и класс D стал наследоваться от B2

class D : public B2

{

void show()

{

  B::show();

}

}

но при этом в методе D::show() разработчик может забыть заменить B::show() на B2::show(), чего не было бы, если бы можно было бы написать base::show();

Предлагаю дополнить возможность использования ключевого слова base в случае, если класс имеет только одного предка. в случае множественного наследования - выдавать ошибку о невозможности использовать base

 

-7
рейтинг
1 комментарий
Олег Ляттэ

Но ведь можно уже сейчас в начале объявления класса D написать using base = B2. Поскольку это рядом с описанием базового класса (или классов), то есть довольно высокий шанс исправить этот using, если вдруг поменяется базовый тип.

На мой взгляд было бы больше смысла стандартизировать что-то вроде майкрософтовского __super.

__super::show() тут вызовет show() у базового класса даже в случае, если базовых классов несколько. Если неоднозначность - ошибка.

Олег Ляттэ
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения