Извините за неописуемый заголовок, но у меня сейчас сложный путь со словами. Я просто прыгну в него:
class A
{
public:
protected:
int doSomething();
};
class B : public A
{
public:
int doSomething() { return A::doSomething(); }
};
...
A *a = new A;
B *b = static_cast<B*>(a);
cout << b->doSomething();
В частности, B наследует A и не добавляет никаких элементов данных или виртуальных функций и не переопределяет никакие виртуальные функции. Это означает, что экземпляр B должен быть эквивалентен в памяти экземпляру A, я полагаю.
В принципе, это безопасно? Я уверен, что это не законно, но переносимо ли? Есть ли потенциальные последствия полагаться на что-то подобное? (Кроме нормального ядаяда.)
Очевидно, что это плохая практика, но я вижу это так же, как вижу, как отбрасываю const - это может быть лучше, чем альтернатива (если она есть). Однако, если у вас есть неочевидные причины, это плохо, мне определенно интересно.