第十四周 项目二:定义抽象类Shape,由此派生出Circle(圆形)、Rectangle(矩形)、Triangle(三角形)

该程序定义了一个抽象基类Shape,包含一个纯虚函数`area()`,并从Shape派生出了Circle、Rectangle和Triangle三个类,分别计算圆形、矩形和三角形的面积。在main函数中,创建了这些派生类的对象,通过基类指针数组计算所有形状的总面积。
摘要由CSDN通过智能技术生成
/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 作者:      李洋
* 完成日期: 2013年 6 月 2 日
* 版本号: v1.0
* 输入描述:无
* 问题描述:,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形)、Rectangle(矩形)、Triangle(三角形)。
* 程序输出:几个几何体的面积和
*/
#include <iostream>
using namespace std;
class Shape
{
public:
    virtual double area() const =0;//定义纯虚函数
};

class Circle:public Shape
{
public:
    Circle(double r):radius(r) {}
    double area() const;
private:
    double radius;
};
double Circle::area()const
{
    return(radius*radius*3.14);
}

class Rectangle:public Shape
{
public:
    Rectangle(double w,double h):width(w),height(h){}
    double area( ) const;

private:
    double width;
    double height;
};

double Rectangle::area( )const
{
    return width*height;
}

class Triangle:public Shape
{
public:
    Triangle(double x,double y):wid(x),hei(y) {}
    double area( )const;
pr
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是回复: 首先声明一个抽象基类Shape,它包含一个纯虚函数getArea(),用于计算面积。然后派生三个CircleRectangle和Triangle,分别实现getArea()函数,计算圆形矩形三角形的面积。最后定义一个函数printArea(),接收一个Shape型的指针,调用它的getArea()函数并输面积即可。 ### 回答2: 在面向对象编程中,抽象基类是一种特殊的,它不能被实例化,只能被继承。抽象基类的主要作用是将具有相似功能的进行归纳和分,方便代码的维护和重复利用。在本题中,声明一个抽象基类shape可以将三种不同形状进行统一管理和封装。 具体实现方法如下: 1. 声明抽象基类shape,其中包含一个纯虚函数getArea(),用于计算面积。 class shape { public: virtual double getArea() = 0; }; 2. 派生三个具体形状圆形circle矩形rectangle三角形triangle。这些派生需要实现抽象基类shape中的纯虚函数getArea()。 class circle : public shape { public: circle(double r) : radius(r) {} double getArea() {return 3.14 * radius * radius;} private: double radius; }; class rectangle : public shape { public: rectangle(double l, double w) : length(l), width(w) {} double getArea() {return length * width;} private: double length; double width; }; class triangle : public shape { public: triangle(double b, double h) : base(b), height(h) {} double getArea() {return 0.5 * base * height;} private: double base; double height; }; 3. 编写一个输三个形状面积的函数,使用抽象基类指针实现多态调用。 void printArea(shape* sh) { cout << "The area is " << sh->getArea() << endl; } 4. 在主函数中创建三个对象,并分别调用输函数。 int main() { circle c(5); rectangle r(3, 4); triangle t(2, 5); printArea(&c); printArea(&r); printArea(&t); return 0; } 运行结果: The area is 78.5 The area is 12 The area is 5 通过使用抽象基类,我们可以将具有相似功能的进行分和管理,避免代码冗余和重复编写。同时,使用虚函数实现多态性,可以让同一个函数实现不同的功能,提高代码的灵活性和可维护性。 ### 回答3: 要实现声明抽象基类shape,可以定义一个Shape,其中定义了一个纯虚函数getArea(),用于返回该形状的面积。然后派生三个CircleRectangle和Triangle,分别实现getArea()函数,获取各自形状的面积。 具体实现可以如下: ```c++ #include <iostream> using namespace std; class Shape{ public: virtual double getArea()=0; }; class Circle : public Shape{ public: Circle(double r){ radius=r; } double getArea(){ return 3.14*radius*radius; } private: double radius; }; class Rectangle : public Shape{ public: Rectangle(double l, double w){ length=l; width=w; } double getArea(){ return length*width; } private: double length; double width; }; class Triangle : public Shape{ public: Triangle(double b, double h){ base=b; height=h; } double getArea(){ return 0.5*base*height; } private: double base; double height; }; void printArea(Shape *shape){ cout<<"面积为:"<<shape->getArea()<<endl; } int main(){ Circle c(3); Rectangle r(4,5); Triangle t(6,8); printArea(&c); printArea(&r); printArea(&t); return 0; } ``` 然后我们可以定义一个函数printArea,用于输各个形状的面积。该函数接收一个Shape型的指针作为参数,根据指针所指向的对象调用getArea()函数获取面积,并输。 以上就是实现声明抽象基类shape,从中派生三个圆形circle矩形rectangle三角形triangle,用一个函数输三个面积的具体方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值