В C++ я не могу понять, когда указатель базового класса хранит адрес объекта производного класса, он не может вызвать функцию-член производного класса?Виртуальная функция, как они работают?
#include <iostream>
using namespace std;
class Base
{
public:
virtual void show()
{
cout<<" In Base ";
}
};
class Derived: public Base
{
public:
int x;
void show()
{
cout<<"In Derived ";
}
Derived()
{
x = 10;
}
};
int main(void)
{
Base *bp, b;
Derived d;
bp = &d;
bp->show();
cout << bp->x;
return 0;
}
По мне: derived d
=> выделяет память для этого объекта (следовательно, х также) сказать, по адресу 200, bp = &d;
=> она выделена по адресу 200 до п.н.. Теперь он должен иметь возможность называть bp-> x? Но это дает ошибку.
возможно дубликат [поведение виртуальной функции в C++] (HTTP: // StackOverflow .com/questions/2669681/behavior-of-virtual-function-in-c) –
Этот вопрос, похоже, не о виртуальных функциях, а о Base, не имеющий члена, называемого x. – PlasmaHH