从shape类派生出一个正n边形

在一个正n边形(Regular Polygon)中,所有边的边长都相等,且所有角的度数相同(即这个多边形是等边、等角的)。请从下列的抽象类shape类扩展出一个正n边形类RegularPolygon,这个类将正n边形的边数n和边长s作为私有成员,类中包含初始化边数n和边长s的构造函数。

class shape {// 形状类
public:
 double getArea()  // 求面积
 {return -1;}
 double getPerimeter() // 求周长
 {return -1;}
};
计算正n边形的面积公式为: Area=n×a×a/(tan((180度/n))×4);

注意:需要将角度转换成弧度后再计算三角函数。π取3.1415926

函数接口定义:
类名:RegularPolygon
裁判测试程序样例:
#include <iostream>
#include <cmath> 
using namespace std;

class shape {// 形状类
public:
 double getArea()  // 求面积
 {return -1;}
 double getPerimeter() // 求周长
 {return -1;}
};
/* 请在这里填写答案 */
//Your code will be embed-ed here.

int main()
{
    int n; 
    double s;
    
    cin>>n>>s;
    RegularPolygon p(n,s);
    cout<<p.getArea()<<endl;

    cout<<p.getPerimeter()<<endl;

    return 0;
}
输入样例:
在这里给出一组输入。例如:

5   3.3
输出样例:
在这里给出相应的输出。例如:

18.736
16.5
 

class RegularPolygon : public shape { // 正n边形类,继承自形状类
private:
    int n; // 边数
    double s; // 边长

public:
    // 构造函数
    RegularPolygon(int n, double s) : n(n), s(s) {}

    // 计算面积
    double getArea() {
        // 计算角度对应的弧度
        double radian = 3.1415926 / n;
        // 使用公式计算面积
        return n * s * s / (tan(radian) * 4);
    }

    // 计算周长
    double getPerimeter() {
        // 周长为边数乘以边长
        return n * s;
    }
};

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是代码实现: ```cpp #include <iostream> using namespace std; // 抽象基 Shape class Shape { public: virtual double getArea() = 0; // 纯虚函数,计算面积 }; // 派生 Circle 圆形 class Circle : public Shape { public: Circle(double r) : radius(r) {} double getArea() { return 3.14 * radius * radius; } // 计算圆形面积 private: double radius; // 圆形半径 }; // 派生 Rectangle 矩形 class Rectangle : public Shape { public: Rectangle(double w, double h) : width(w), height(h) {} double getArea() { return width * height; } // 计算矩形面积 private: double width; // 矩形宽度 double height; // 矩形高度 }; // 派生 Triangle 三形 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 circle(5.0); // 定义圆形对象,半径为5 Rectangle rect(4.0, 6.0); // 定义矩形对象,宽度为4,高度为6 Triangle triangle(3.0, 8.0); // 定义三形对象,底边长为3,高度为8 printArea(&circle); // 输圆形面积 printArea(&rect); // 输矩形面积 printArea(&triangle); // 输形面积 return 0; } ``` 输结果: ``` 该图形的面积为:78.5 该图形的面积为:24 该图形的面积为:12 ``` ### 回答2: 下面是一个示例的C程序,实现了抽象基Shape和它的派生Circle、Rectangle、Triangle,并在printArea函数分别输它们的面积。 ```c #include <stdio.h> // 声明抽象基 Shape typedef struct { double area; } Shape; // 声明派生 Circle typedef struct { Shape base; double radius; } Circle; // 声明派生 Rectangle typedef struct { Shape base; double width; double height; } Rectangle; // 声明派生 Triangle typedef struct { Shape base; double base_length; double height; } Triangle; // 输图形的面积 void printArea(Shape* shape) { printf("面积: %lf\n", shape->area); } int main() { Circle circle; Rectangle rectangle; Triangle triangle; // 给定圆的数据 circle.radius = 5.0; circle.base.area = 3.14159 * circle.radius * circle.radius; printArea((Shape*)&circle); // 给定矩形的数据 rectangle.width = 5.0; rectangle.height = 8.0; rectangle.base.area = rectangle.width * rectangle.height; printArea((Shape*)&rectangle); // 给定三形的数据 triangle.base_length = 6.0; triangle.height = 4.0; triangle.base.area = 0.5 * triangle.base_length * triangle.height; printArea((Shape*)&triangle); return 0; } ``` 在这个程序里,通过在抽象基Shape声明了一个成员变量area来表示图形的面积。派生Circle、Rectangle和Triangle分别拥有自己特定的数据成员radius、width和height,通过给这些成员变量赋值来确定图形的数据。printArea函数接受一个指向Shape的指针,并通过该指针来访问各个派生对象的面积。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值