在代码中,我能够成功地将派生类指针指向基类对象,并且我还能够设置和获取基类私有成员的值。如果这没有给出任何问题那么虚拟函数的需求和运行时多态性/后期绑定/ vtable bla bla bal !!!的整个混乱是什么!!!
#include <iostream>
using namespace std;
class Base
{
int a;
public:
Base(int x=0):a(x){}
void setValueForMember(int p)
{
a=p;
}
void showValueOfMember(){cout<<endl<<a<<endl;}
};
class Derived:public Base
{
int b;
public:
Derived(){}
Derived(int y):b(y){}
void setValueForMember(int q)
{
b=q;
}
void showValueOfMember(){cout<<endl<<b<<endl;}
};
int main()
{
Derived D;
D.setValueForMember(10);
Derived *Dptr = new Derived();
Dptr = &D;
Dptr->showValueOfMember();
Base B;
Dptr = (Derived*)&B;
Dptr->setValueForMember(20);
Dptr->showValueOfMember();
return 0;
}
答案 0 :(得分:0)
在我们想要使用类型的指针,基类访问派生类的成员的情况下使用虚函数。
Bptr =安培; d;
您无法访问Derived类的成员,但从Base类继承的成员除外。 如果要使用与Bptr相同的指针访问Derived类的成员,则必须使用虚函数,
运行时多态或动态绑定
。