У нас с другом недавно возникла следующая проблема. Был базовый класс:
class A {
public:
A() : foo(10) {}
virtual int getFoo() const { return foo; }
protected:
int foo;
};
Друг реализовал класс, производный от предыдущего.
class B : public A {
public:
void process() { foo = 666; }
protected:
//int foo;
};
К сожалению, он также добавил поле foo в классе потомков (закомментированная строка). Итак, следующий код.
#include <iostream>
int main()
{
A* aaa= NULL;
if (1) {
B* bbb = new B;
bbb->process();
aaa = bbb;
}
std::cout << aaa->getFoo() << std::endl;
return 0;
}
напечатано 10 .
Это не проблема, так как это будет полностью переработано, и таких вещей не произойдет в будущем.
Мне было просто интересно, знаете ли вы какие-либо (переносимые) трюки или языковые шаблоны ( помимо очевидных получателей / установщиков; кстати, они были там на самом деле, с foo , являющимися приватными) запретит объявление переменной с тем же именем в классе потомков (например, из-за ошибки времени компиляции).
ТИА!