使用函数重载,实现求圆,矩形,三角形的面积的程序.c++

如题所述

#include <iostream>
#include <stdexcept>
#include <cmath>

struct Shape {
    virtual ~Shape() = 0 {}
    virtual double area() const = 0;
};

class Circle : public Shape {
    double r_;
public:
    Circle(double const r) : r_(r) {
        if (r < 0) throw std::invalid_argument("半径不能为负");
    }

    double area() const {
        static double const pi = 3.14159265358979324;
        return pi*r_*r_;
    }
};

class Rectangle : public Shape {
    double x_, y_;
public:
    Rectangle(double const x, double const y) : x_(x), y_(y) {
        if (x < 0 || y < 0) throw std::invalid_argument("长、宽不能为负");
    }

    double area() const {
        return x_*y_;
    }
};

class Triangle : public Shape {
    double x_, y_, z_;
public:
    Triangle(double const x, double const y, double const z) : x_(x), y_(y), z_(z) {
        if (x < 0 || y < 0 || z < 0) throw std::invalid_argument("边长不能为负");
    }

    double area() const {
        // 海伦公式
        double const p = (x_ + y_ + z_) / 2;
        return sqrt(p*(p - x_)*(p - y_)*(p - z_));
    }
};

int main() {
    try {
        Shape const *s[] = { new Circle(1), new Rectangle(1, 1), new Triangle(1, 1, 1) };
        for (size_t i = 0; i != sizeof(s) / sizeof(Shape const*); ++i) {
            std::cout << "第" << i << "个图形的面积为:" << s[i]->area() << "\n";
            delete s[i];
        }
    }
    catch (std::exception const &err) {
        std::cerr << err.what() << "\n";
    }

    return 0;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

使用函数重载,实现求圆,矩形,三角形的面积的程序.c++
include <iostream>#include <stdexcept>#include <cmath>struct Shape { virtual ~Shape() = 0 {} virtual double area() const = 0;};class Circle : public Shape { double r_;public: Circle(double const r) : r_(r) { if (r < 0) throw std::invalid_argument("...

编写一个c++程序,使用内联函数,函数重载,求三角形 矩形圆形 的面积
}\/\/ 给矩形宽高,求矩形面积inline double area(double width, double height) { return width * height;}\/\/ 给圆半径,求圆面积inline double area(double r) { return 2 * PI * r * r;}int main() { cout<<"边长为 3, 4, 5 的三角形面积为 "<<area(3,4,5)<<endl ...

用函数重载方法编写求面积程序,要求能计算圆,矩形三角形面积
#include <cstdlib>#include <cmath>#include <iostream>\/\/ 定义π的值,主要是利用数学函数中的反三角函数arccos(-1)=πconst double pi = acos(-1);\/\/ 计算圆的面积,dbRadius为圆的半径double getArea(double dbRadius){ return pi*dbRadius*dbRadius;}\/\/ 计算矩形的面积,dbLong、dbWide...

编写重载函数area(),分别计算圆、矩形的面积,其函数的首部为: Double...
do{ cout<<"请选择图形(圆形请输入1‘长方形请输入2’三角形请输入3)"<<endl;cin>>i;switch(i){ case 1:cout<<"请输入半径"<<endl;double R;cin>>R;cout<<getArea(R);break;case 2:cout<<"输入长高"<<endl;double a,c;cin>>a>>c;cout<<getArea(a,c);break;case 3:cout<<"...

如何用c++面向对象来求多个圆的面积和
using namespace std;class Shape \/\/Shape这个类里面重载了计算面积的函数 { public:float Shape::GetArea(float radious)\/\/计算圆的面积 { return float (PI*radious*radious);} float Shape::GetArea(float side1, float side2, float side3)\/\/计算三角形面积 { float average=(side1+side2...

用C++编程求解圆,长方形,正方形等面积
int main(){ cout<<"请选择你要计算的图形:"<<endl;cout<<"A.圆形B.正方形C.矩形"<<endl;char s;cin>>s;double a,b;switch(s){ case 'a':cout<<"请输入半径:"<<endl;cin>>a;cout<<"园的面积为:"<<3.14*a*a<<endl;break;case 'b':cout<<"请输入正方形边长:"<<endl...

设计一个求各类图形面积的C++程序
using namespace std;class Shape \/\/Shape这个类里面重载了计算面积的函数 { public:float Shape::GetArea(float radious)\/\/计算圆的面积 { return float (PI*radious*radious);} float Shape::GetArea(float side1, float side2, float side3)\/\/计算三角形面积 { float average=(side1+side2...

c++ 重载函数问题 复数是如何实现的?请解释的详细一点 在线等_百度...
那个下面附上数学复数代码吧,如果你有用:include<iostream.h>#include <iomanip.h>class CComplex{\/\/复数类double Real;\/\/实部double Imag;\/\/虚部public:CComplex(double re = 0,double im = 0){\/\/初始化复数Real = re;Imag = im;}virtual ~CComplex();\/\/析构函数bool IsReal();\/\/判断...

用函数重载求取长方形面积的c++代码
改好了,底下的输入和调用参数不一致的地方也有好几处 #include using namespace std;#define PI 3.14double area(double a){return PI*a*a;}double area(double a,double b){return a*b;}double area_c(double c)\/\/这个不是重载了 ...

用两种方法计算三角形面积GetTriangleArea,用c++知识,利用函数重载
你好,可以考虑两种方式:底*高*0.5 double GetTriangleArea(double dWidth, double dHeight){ return 0.5 * dWidth * dHeight;} 2.正弦定理 include "math.h"double GetTriangleArea(double dAngle, double dLength1, double dLength2){ return 0.5 * dLength1 * dLength2 * sin(dAngle)...

相似回答