zpcdcsdn 2014-06-12 07:24 采纳率: 0%
浏览 1827

请高人指点一下这段代码的执行过程,不胜感激

请您帮忙分析一下以下代码的执行过程,在下在编译器上跑了一遍,可还是不太明白,希望能得到您的详尽的解释,谢谢!
#include
using namespace std;
class Shape
{
public:
Shape(){}
virtual ~Shape() {}
virtual float Area() const=0;
virtual Shape * Clone() const=0;
};

class Circle:public Shape
{
public:
Circle(float r):radius(r) {}
virtual ~Circle() {}
virtual float Area() const
{
cout<<"Circle's Area ="<<radius*radius*3.1415926<<endl;
return radius*radius*3.1415926f;
}
virtual Circle * Clone() const {return new Circle(*this); }
private:
Circle(const Circle& rhs)
{
cout<<"Copy Construct Circle!"<<endl;
radius=rhs.radius;
}
private:
float radius;
};

class Rectangle:public Shape
{
public:
Rectangle(float w,float h):width(w),height(h) {}
virtual ~Rectangle() {}
virtual float Area() const
{
cout<<"Rectangle's Area ="<<width*height<<endl;
return width*height;
}
virtual Rectangle * Clone() const {return new Rectangle(*this); }
private:
Rectangle(const Rectangle& rhs)
{
cout<<"Copy Construct Rectangle!"<<endl;
width=rhs.width;height=rhs.height;
}
private:
float width;
float height;
};

int main(int argc, char* argv[])
{
Shape * p1=new Circle(2.5);
p1->Area();

Shape * p2=new Rectangle(5,11);
p2->Area();

Shape *p3=p1->Clone();
p3->Area();

Shape *p4=p2->Clone();
p4->Area();

delete p4;
delete p3;
delete p2;
delete p1;

return 0;

}
对于您的热心帮助,在下先行谢过!

  • 写回答

1条回答

  • dlw_livis 2014-06-12 11:32
    关注

    执行过程分析:
    1.对于p1,作为向上造型父类的指针,它可以接受子类的对象,所以p1->Area()会输出子类的面积
    2.对于p2,道理如上,输出的是子类矩形的面积
    3.对于p3,是调用一个指针所指向类的函数的返回值,这个返回值指向了一个对象,这个对象根据p2或者p1来区分,p3指向的是p1所调用的函数,所以是圆的面积,p1在clone函数中会new一个新的对象,根据所传参数类型为指针,会选用相关的重载构造器,所以会输出“copy construct circle”这句话,最后调用area会输出相应的圆的面积
    4.对于p4,道理如上所示
    5.最后注意对象的删除过程,先删除子类指针,再删除父类指针
    6.希望对你有用

    评论

报告相同问题?

悬赏问题

  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形