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:%dn", val);
}
void CMyClassA::print() {
printf("%dn", 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:%dn",val);
}
void print()
{
printf("%dn", 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<<"创建航行器(速度: "<
#includeusing 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.4class 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,分别求出他们的面积。
裁判测试程序样例:#includeusing 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 = 6class 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#includeusing 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:%dn", val); } void CMyClassA::print() { printf("%dn", 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 5class CMyClassB:public CMyClassA { int val; public: CMyClassB(int arg):CMyClassA(3*arg) { val = arg; printf("B:%dn",val); } void print() { printf("%dn", 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) 测试程序#includeusing 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<<"创建航行器(速度: "<



