【发布时间】:2015-09-29 07:38:05
【问题描述】:
在代码中,我能够成功地将派生类指针指向基类对象,并且我还能够设置和获取基类私有成员的值。如果这没有给出任何问题,那么需要什么虚函数以及围绕运行时多态性/后期绑定/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;
}
【问题讨论】:
-
Virtual functions的可能重复
-
Derived *Dptr = new Derived(); Dptr = &D;-> 内存泄漏。 -
Base B; Dptr = (Derived*)&B;-> 非法转换。 -
@donjuedo 奇怪,我在那个问题中看到的几乎是全部。
标签: c++ function polymorphism virtual