cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

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

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +1, -9 Автор идеи: Андрей Уланов

В языках 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

apolukhin commented 3 years ago

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

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

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

apolukhin commented 3 years ago

Идея #421 дублирует эту, но прорботана лучше