代码没有问题,我将你的代码在VS2010下创建了个测试项目,仅仅把你的虚函数名改成输出的,完全没有问题,我认为是编译器差异造成的,。
参考下面代码
#include
using namespace std;
struct Param{
double x,y;
};
struct CircleParam:public Param{
double z;
};
class Point
{
public:
Point(double p=0,double q=0){X=p;Y=q;cout<<"点构造完成"<
virtual void Set(Param* p){X=p->x;Y=p->y;}
virtual void Print(){cout<<"( "<
virtual ~Point(){cout<<"点析构函数被调用"<
double X,Y;
};
class Circle:public Point
{
public:
Circle(double p=0,double q=0,double r=0){X=p;Y=q;R=r;cout<<"圆构造完成"<
virtual void Set(Param* p){
CircleParam* pp=(CircleParam*)p;
X=pp->x;Y=pp->y;R=pp->z; cout<<"CircleParam"<
~Circle(){cout<<"圆析构函数被调用"<
double R;
};
int main(){
Point* p=new Circle;
CircleParam pa;
pa.x=0,pa.y=0,pa.z=0;
p->Set(&pa);
system("pause");
}