Как указывают другие существующие ответы, неявно сгенерированный оператор присваивания B
скрывает оператор присваивания, определенный в A
.Это верно для любой не виртуальной функции-члена в базовом классе, единственной особенностью здесь является автоматически сгенерированный оператор присваивания.
Но сначала попытайтесь выяснить, действительно ли вы хотите это сделать.Представьте, что в вашем классе B
есть члены-данные, которые нужно каким-то образом инициализировать.Как использование назначения из A
влияет на эти элементы данных?A
ничего не знает о своих производных элементах данных класса, их бы не трогали.Посмотрите на следующий сценарий, в котором оператор присваивания был сделан доступным с помощью директивы using:
class B : public A {
public:
using A::operator=;
int m = 0; // Default-initialize data member to zero
};
B b;
b.m = 42;
b = 0; // Doesn't touch B::m... intended? A bug? Definitely weird.
Так что да, это возможно, но подвержено ошибкам и опасно, особенно когда речь идет о будущих модификацияхподкласса.