2.编写程序:定义抽象基类Shape,area( )为求图形面积的虚成员函数。由它派生出三个派生类:Circle(圆形)、Rectangle(长方形
)、和Triangle (三角形),用虚函数area分别计算各种图形的面积。在主函数中,
分别创建派生类的对象并计算其面积,求出它们的
面积的和。要求用基类指针数组,使它的每一个元素指向一个派生类的对象,以体现多态性。
*/
#include<iostream>
class Shape
{
public:
Shape(int x,int y);
virtual void area() = 0;
protected:
int x;
int y;
};
class Circle : virtual public Shape
{
public:
Circle(int x);
void area();
protected:
int x;
};
//子类圆
class Rectangle : virtual public Shape
{
public:
Rectangle(int x,int y);
void area();
protected:
int x;
int y;
};
//子类长方形
class Triangle : virtual public Shape
{
public:
Triangle(int x,int y);
void area();
protected:
int x;
int y;
};
//子类三角形
Shape::Shape(int x,int y):x(x),y(y){}
Circle::Circle(int x):Shape(x,y){}
void Circle::area()
{
std::cout<<"圆的半径为"<<x<<std::endl;
std::cout<<"面积为"<<3.14*x*x<<std::endl;
}
Rectangle::Rectangle(int x,int y):Shape(x,y){}
void Rectangle::area()
{
std::cout<<"长方形的宽为"<<x<<"长为"<<y<<std::endl;
std::cout<<"面积为"<<x*y<<std::endl;
}
Triangle::Triangle(int x,int y):Shape(x,y){}
void Triangle::area()
{
std::cout<<"三角形的底为"<<x<<"高为"<<y<<std::endl;
std::cout<<"面积为"<<1.0/2*x*y<<std::endl;
}
int main()
{
Shape *ptr;
Circle circle(2);
Rectangle rectangle(2,2);
Triangle triangle(2,2);
ptr=&circle;
ptr->area();
ptr=&rectangle;
ptr->area();
ptr=▵
ptr->area();
return 0;
}
2 个解决方案
#1
这是结果显示
#2
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
#1
这是结果显示
#2
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。