Я написал несколько строк кода, которые, как я думаю, не следует компилировать. Я вызываю метод производного класса на указатель static_cast-эд на объект базового класса следующим образом:Метод вызова производного класса на объекте базового класса
class B {};
class D: public B
{
public:
void bar() { printf("%d\n", m_i); }
private:
int m_i;
};
int main()
{
B b;
D* d = static_cast<D*>(&b);
d->bar();
return 0;
}
Значение печатается явно нездоровая, но если это даже компилировать? Как это сделать gcc
?
Почему он не должен компилироваться? Вы производите B как D. Для всего, что компилятор знает, он выполняет операции на D – Falmarri
, пожалуйста, не используйте printf в коде C++. – BatchyX
@BatchyX: 'printf' может быть ужасно опасным, но он значительно быстрее, чем' cout' и друзей. – Puppy