
6-1 抽象类Shape
请编写一个抽象类Shape,包括两个纯虚函数,分别为计算面积getArea()和计算周长getPerim()。通过Shape类派生出矩形类Rectangle和圆类Circle,并计算各自的面积和周长。
测试用例具体要求:输入1表示测试矩形类,之后输入矩形长和宽。输入2表示测试圆类,之后输入圆半径。
Shape类定义如下:class Shape { public: virtual double getArea()=0; virtual double getPerim()=0; };
裁判测试程序样例:
#include
using namespace std;
const double PI=3.14;
class Shape {
public:
virtual double getArea()=0;
virtual double getPerim()=0;
};
/* ------请在这里填写答案 ------*/
int main() {
Shape *p;
int n;
double w,h,r;
scanf("%d",&n);
switch(n) {
case 1: {
cin>>w>>h;
Rectangle rect(w,h);
cout<<"area="<>r;
Circle c(r);
cout<<"area="<
输入样例1:
在这里给出一组输入。例如:
1
4 5
输出样例1:
在这里给出相应的输出。例如:
area=20
perim=18
输入样例2:
在这里给出一组输入。例如:
2
5
输出样例2:
在这里给出相应的输出。例如:
area=78.5
perim=31.4
class Rectangle:public Shape
{
public:
double h,w;
Rectangle(double a,double b):h(a),w(b){}
virtual double getArea()
{
return h*w;
}
virtual double getPerim()
{
return (h+w)*2;
}
};
class Circle:public Shape
{
public:
double r;
Circle(double n):r(n){}
virtual double getArea()
{
return r*r*PI;
}
virtual double getPerim()
{
return r*2*PI;
}
};
6-2 面积的派生(20)
已经创建好了一个面积的基类,你需要实现矩形、圆形、三角形、正方形4个不同形状物体的面积。矩形的私有成员为l,h,圆的私有成员为r,正方形的私有成员为l,三角形的私有成员为d,h。 其中,圆周率取3.14159,分别求出他们的面积。
裁判测试程序样例:#include
using namespace std;
class CShape{
public:float Area;
float Perimeter;
CShape(){
Area=0;Perimeter=0;
}
virtual void GetArea(){}
};
/* 请在这里填写答案 */
int main()
{
CShape *p[4];
CRectangle CR(5,10);
CCirle CC(3);
CSquare CS(4);
CTrangle CT2(6,2);
p[0]=&CR;
p[0]->GetArea();
p[1]=&CC;
p[1]->GetArea();
p[2]=&CS;
p[2]->GetArea();
p[3]=&CT2;
p[3]->GetArea();
return 0;
}
输入样例:
在这里给出一组输入。例如:
无输入
输出样例:
在这里给出相应的输出。例如:
Rectangle = 50
Cirle = 28.2743
Square = 16
Trangle = 6
class CRectangle:public CShape
{
private:
float l,h;
public:
CRectangle(float a,float b):l(a),h(b){};
void GetArea()
{
cout<<"Rectangle = "<
6-3 最大值函数重载
编写重载函数myMax可分别求取两个整数,三个整数,两个双精度数的最大值。
函数接口定义:裁判测试程序样例:
/* 请在这里填写答案 */
int main(){
cout<
输入样例:
无
输出样例:在这里给出相应的输出。例如:
4
5
4.3
#include
using namespace std;
int myMax(int a,int b)
{
return a>b?a:b;
}
int myMax(int a, int b, int c)
{
return (a>b?a:b)>c?(a>b?a:b):c;
}
double myMax(double a,double b)
{
return a>b?a:b;
}
6-4 虚函数的应用
补充下列代码,使得程序的输出为:
A:3
A:15
B:5
3
15
5
参见裁判测试程序样例中的类和函数接口。
裁判测试程序样例:
#include
using namespace std;
class CMyClassA {
int val;
public:
CMyClassA(int);
void virtual print();
};
CMyClassA::CMyClassA(int arg) {
val = arg;
printf("A:%d\n", val);
}
void CMyClassA::print() {
printf("%d\n", val);
return;
}
/* 在这里填写代码 */
int main(int argc, char** argv) {
CMyClassA a(3), *ptr;
CMyClassB b(5);
ptr = &a;
ptr->print();
a = b;
a.print();
ptr = &b;
ptr->print();
return 0;
}
输入样例:
None
输出样例:
A:3
A:15
B:5
3
15
5
class CMyClassB:public CMyClassA
{
int val;
public:
CMyClassB(int arg):CMyClassA(3*arg)
{
val = arg;
printf("B:%d\n",val);
}
void print()
{
printf("%d\n", val);
}
};
6-5 水上飞机*
请设计以下航行器、飞机、船、水上飞机等4个类。
-
CRAFT类为航行器类,是公共基类,提供航行器的基本特性。包括:
一个保护数据成员:speed(速度)。
三个公有成员函数:构造函数(初始化速度)、析构函数和Show函数(显示速度)。
-
PLANE类为飞机类,以公有方式继承CRAFT类,在航行器类的基础上增加飞机的特性。包括:
一个保护数据成员:width(翼展)。
三个公有成员函数:构造函数(初始化速度和翼展)、析构函数和Show函数(显示速度和翼展)。
-
SHIP类为船类,以公有方式继承CRAFT类,在航行器类的基础上增加船的特性。包括:
一个保护数据成员:depth(吃水深度)。
三个公有成员函数:构造函数(初始化速度和吃水深度)、析构函数和Show函数(显示速度和吃水深度)。
-
SEAPLANE类为水上飞机类,同时以公有方式继承PLANE类和SHIP类,兼具飞机和船的特性。包括:
三个公有成员函数:构造函数(初始化速度、翼展、吃水深度)、析构函数和Show函数(显示速度、翼展和吃水深度)。
测试用例
- 样例一
CRAFT *p; p = new CRAFT(87.2); p->Show(); delete p;
创建航行器(速度: 87.2)
航行(速度: 87.2)
销毁航行器(速度: 87.2)
- 样例二
CRAFT *p; p = new PLANE(613.5, 45.3); p->Show(); delete p;
创建航行器(速度: 613.5)
创建飞机(翼展: 45.3)
航行(速度: 613.5, 翼展: 45.3)
销毁飞机(翼展: 45.3)
销毁航行器(速度: 613.5)
- 样例三
CRAFT *p; p = new SHIP(45.8, 8.3); p->Show(); delete p;
创建航行器(速度: 45.8)
创建船(吃水: 8.3)
航行(速度: 45.8, 吃水: 8.3)
销毁船(吃水: 8.3)
销毁航行器(速度: 45.8)
- 样例四
CRAFT *p; p = new SEAPLANE(415.2, 36.5, 2.1); p->Show(); delete p;
创建航行器(速度: 415.2)
创建飞机(翼展: 36)
创建船(吃水: 2.1)
创建水上飞机
航行(速度: 415.2, 翼展: 36, 吃水: 2.1)
销毁水上飞机
销毁船(吃水: 2.1)
销毁飞机(翼展: 36)
销毁航行器(速度: 415.2)
测试程序
#include
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
double s, w, d;
CRAFT *p;
cin >> s >> w >> d;
p = new SEAPLANE(s, w, d);
p->Show();
delete p;
return 0;
}
输入样例
415.2 36.5 2.1
输出样例
创建航行器(速度: 415.2)
创建飞机(翼展: 36.5)
创建船(吃水: 2.1)
创建水上飞机
航行(速度: 415.2, 翼展: 36.5, 吃水: 2.1)
销毁水上飞机
销毁船(吃水: 2.1)
销毁飞机(翼展: 36.5)
销毁航行器(速度: 415.2)
class CRAFT
{
protected:
double speed;
public:
CRAFT(double a):speed(a)
{
cout<<"创建航行器(速度: "<
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)