怎么计算一个图像的面积呢?????

任务描述

本关任务:设计一个矩形类、一个圆形类和一个图形基类,计算并输出相应图形面积。

相关知识

为了完成本关任务,你需要掌握纯虚函数和抽象类的使用。

纯虚函数
有时在类中将某一成员声明为虚函数,并不是因为基类本身的要求,而是因为派生类的需求,在基类中预留一个函数名,具体功能留给派生类区定义。这种情况下就可以将这个纯虚函数声明为纯虚函数。即纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类对它进行定义。

纯虚函数就是在声明虚函数时被初始化为0的函数,但它只有名字,不具备函数功能,不能被调用,其一般形式是:

virtual 函数类型 函数名(参数列表) = 0
纯虚函数没有函数体。最后的“=0”只是一种形式,告诉编译系统,它是一个纯虚函数,留在派生类中定义,并没有实际意义。

纯虚函数只有在派生类中定义了之后才能被调用。如果在一个类中声明了纯虚函数,而在派生类中没有对该函数定义,则该虚函数在派生类中仍然为纯虚函数。

例如:

class Base
{
public:
virtual void Func() = 0; // 声明一个纯虚函数
};
抽象类
含有纯虚函数的类就成为抽象类。抽象类只是一种基本的数据类型,用户需要在这个基础上根据自己的需要定义处各种功能的派生类。

抽象类的作用就是为一个类族提供一个公共接口。抽象类不能定义对象,但是可以定义指向抽象类的指针变量,通过这个指针变量可以实现多态。

例如:

class Base
{
public:
virtual void Func() = 0; // 声明一个纯虚函数
};
class D1 : public Base {} // 什么也不做
class D2 : public Base
{
public:
void Func() override; // 重写纯虚函数
};
void D2::Func() { /* …… */ }
int main()
{
Base b = Base(); // 错误,Base 类是抽象类,不能定义对象。
Base *ptr1 = new D1(); // 错误,D1 没有重写 Base 类的 Func 函数,所以也是抽象类。
Base *ptr2 = new D2(); //正确
}

编程要求

在右侧编辑器中的Begin-End之间补充代码,设计图像基类、矩形类和圆形类三个类,函数成员变量据情况自己拟定,其他要求如下:

图形类( shape )

纯虚函数:void PrintArea(),用于输出当前图形的面积。
矩形类( Rectangle )

继承 Shape 类,并且重写 PrintArea 函数,输出矩形的面积,输出格式为:矩形面积 = width*height。

带参构造函数:Rectangle(float w,float h),这两个参数分别赋值给成员变量的宽、高。

圆形类( Circle )

继承 Shape 类,并且重写 PrintArea 函数,输出圆形的面积,输出格式为:圆形面积 = radio * radio * 3.14。

带参构造函数:Circle(float r),参数 r 代表圆的半径。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:10 2.5
预期输出:

矩形面积 = 20
圆形面积 = 314
测试输入:2 2.5
预期输出:

矩形面积 = 4
圆形面积 = 12.56

仅供借鉴,禁止直接抄袭

#include <iostream>
using namespace std;

/********* Begin *********/
class Shape
{
	//基类的声明
    public:
	virtual void PrintArea()=0; 
};

class Rectangle : public Shape
{
	//矩形类的声明
    public:
    float H,W; 
    void PrintArea();
    Rectangle(float w,float h);
};
//矩形类的定义
void Rectangle::PrintArea()
{
	cout<<"矩形面积 = "<<W*H<<endl; 
}
Rectangle::Rectangle(float w,float h)
{
	W=w;
	H=h; 
}
class Circle : public Shape
{
	//圆形类的声明
    public:
    float R;
    void PrintArea(); 
    Circle(float r);
};
//圆形类的定义
void Circle::PrintArea()
{
	cout<<"圆形面积 = "<<3.14*R*R<<endl;
}
Circle::Circle(float r)
{
	R=r;
}

/********* End *********/
    

#include "usr.h"

int main()
{
	int i,j;
	cin >> i >> j;
    Shape *ptr = new Rectangle(i,j);
    ptr->PrintArea();
    delete ptr;

    ptr = new Circle(i);
    ptr->PrintArea();
    delete ptr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值