栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

课后练习7、多态(函数)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

课后练习7、多态(函数)

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="<输入样例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 = "<函数接口定义: 
 
裁判测试程序样例: 


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<<"创建航行器(速度: "< 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号