早教吧作业答案频道 -->其他-->
c++编程题虚函数:编写一个程序,计算Circle(圆形)、Square(正方形)、Rectangle(矩形)、Triangle(三角形)、Trapezoid(梯形)的面积与周长。(1)设计一个图形抽象基类Shape类,以及由它
题目详情
c++编程题
虚函数:编写一个程序,计算Circle(圆形)、Square(正方形)、Rectangle(矩形)、Triangle(三角形)、Trapezoid(梯形)的面积与周长。
(1)设计一个图形抽象基类Shape类,以及由它派生出5个类Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类;
(2)在Shape类中包括纯虚函数area和girth;
(3)分别在Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类中定义这两个函数,用于计算面积和周长。
(4)主函数中要求用基类指针数组,使它的每一个元素指向一个派生类对象,分别计算Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类对象的面积和周长。
虚函数:编写一个程序,计算Circle(圆形)、Square(正方形)、Rectangle(矩形)、Triangle(三角形)、Trapezoid(梯形)的面积与周长。
(1)设计一个图形抽象基类Shape类,以及由它派生出5个类Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类;
(2)在Shape类中包括纯虚函数area和girth;
(3)分别在Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类中定义这两个函数,用于计算面积和周长。
(4)主函数中要求用基类指针数组,使它的每一个元素指向一个派生类对象,分别计算Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类对象的面积和周长。
▼优质解答
答案和解析
// 梯形的没写,不记得面积公式了,但是写法和其他形状一样
#include
#include
using namespace std;
const double PI = 3.14;
class Shape {
public:
virtual double area() = 0;
virtual double girth() = 0;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double area() { return PI * radius * radius; }
double girth() { return 2 * PI * radius; }
private:
double radius;
};
class Square : public Shape {
public:
Square(double l) : length(l) {}
double area() { return length * length; }
double girth() { return 4 * length; }
private:
double length;
};
class Rectangle : public Shape {
public:
Rectangle(double h, double w) : height(h), width(w) {}
double area() { return height * width; }
double girth() { return 2 * (height + width); }
private:
double height, width;
};
class Triangle : public Shape {
public:
Triangle(double l1, double l2, double l3) : length_1(l1), length_2(l2), length_3(l3) {}
double area() {
return sqrt((length_1 + length_2 + length_3)
* (length_1 + length_2 - length_3)
* (length_1 + length_3 - length_2)
* (length_2 + length_3 - length_1)) / 4;
}
double girth() { return length_1 + length_2 + length_3; }
private:
double length_1, length_2, length_3;
};
int main() {
Shape* ShapeArray[4];
ShapeArray[0] = new Circle(10.0);
ShapeArray[1] = new Square(10.0);
ShapeArray[2] = new Rectangle(10.0, 15.0);
ShapeArray[3] = new Triangle(0.5, 0.6, 0.7);
//print area and girth for each shape;
for (int i = 0; i < 4; ++i) {
cout << ShapeArray[i]->area() << '\t' << ShapeArray[i]->girth() << endl;
}
return 0;
}
#include
#include
using namespace std;
const double PI = 3.14;
class Shape {
public:
virtual double area() = 0;
virtual double girth() = 0;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double area() { return PI * radius * radius; }
double girth() { return 2 * PI * radius; }
private:
double radius;
};
class Square : public Shape {
public:
Square(double l) : length(l) {}
double area() { return length * length; }
double girth() { return 4 * length; }
private:
double length;
};
class Rectangle : public Shape {
public:
Rectangle(double h, double w) : height(h), width(w) {}
double area() { return height * width; }
double girth() { return 2 * (height + width); }
private:
double height, width;
};
class Triangle : public Shape {
public:
Triangle(double l1, double l2, double l3) : length_1(l1), length_2(l2), length_3(l3) {}
double area() {
return sqrt((length_1 + length_2 + length_3)
* (length_1 + length_2 - length_3)
* (length_1 + length_3 - length_2)
* (length_2 + length_3 - length_1)) / 4;
}
double girth() { return length_1 + length_2 + length_3; }
private:
double length_1, length_2, length_3;
};
int main() {
Shape* ShapeArray[4];
ShapeArray[0] = new Circle(10.0);
ShapeArray[1] = new Square(10.0);
ShapeArray[2] = new Rectangle(10.0, 15.0);
ShapeArray[3] = new Triangle(0.5, 0.6, 0.7);
//print area and girth for each shape;
for (int i = 0; i < 4; ++i) {
cout << ShapeArray[i]->area() << '\t' << ShapeArray[i]->girth() << endl;
}
return 0;
}
看了 c++编程题虚函数:编写一个...的网友还看了以下:
如图,四棱锥S-ABCD的底面是正方形,每条侧棱的长都是底面边长的2倍,P为侧棱SD上的点.(1) 2020-05-13 …
(本小题满分14分)如图,P-ABC是底面边长为1的正三棱锥,D、E、F分别为棱长PA、PB、PC 2020-05-13 …
如图所示,斜面与水平面在M点通过小圆弧相连,弹簧左端固定,原长时右端在N点,小物块从斜面上P点由静 2020-05-16 …
如图,一个边长是5厘米的正方体,是由125个边长为1厘米的小正方体组成的.P为上底面ABCD的对角 2020-06-27 …
如图,已知线段AB的长为1,投影面为P.(1)如图1,当AB平行于投影面P时,它的正投影A′B′的 2020-07-10 …
(16分)如图,w*w^w.k&s#5@u.c~o*m四棱锥S-ABCD的底面是正方形,每条侧棱的 2020-07-31 …
如图,棱长为1的正方体ABCD-A1B1C1D1中,M、N分别为AB、BC的中点.(1)当点P在D 2020-08-02 …
设等边三角形ABC的边长为a,P是三角形ABC内的任意一点,且P到三边AB、BC、CA的距离分别为d 2020-10-31 …
设等边△ABC的边长为a,P是△ABC内任意一点,且P到三边AB、BC、CA的距离分别为d1、d2、 2020-10-31 …
要对一块长为60米,宽为40米的长方形场地进行绿化和硬化,设计方案如图所示,长方形P、Q为两块绿地, 2020-11-20 …