旭辉夜夜访 2022-03-06 09:43 采纳率: 100%
浏览 13
已结题

C++继承与派生中的抽象类

img


这个怎么会是错的,我要怎么改才能让他正确。


#include<iostream>
using namespace std;
const double pi=3.14;
class Shape

{

public:

       virtual double Area()=0;

       virtual double Perimeter() = 0;

};

int main()

{

      double r,a,b;

       char *s[2]={"Circle:\n","Rectangle:\n"};

       cin>>r>>a>>b;

       Shape *ptr[]={new Circle(r),new Rectangle(a,b)};

       for(int i=0;i<2;i++)

       {

              cout<<s[i];

              cout<<"Area:"<<ptr[i]->Area()<<endl;

              cout<<"Perimeter:"<<ptr[i]->Perimeter()<<endl;

       }

       return 0;

}
class Circle :public Shape
{
       private:
                double r;
       public:
                Circle(double rr)
                {
                        r=rr;
                }
                double Area()
                {
                       return pi*r*r;
                }
                double Perimete()
                {
                       return 2*pi*r;
                }
};

class Rectangle :public Shape
{
       private:
                double a;
                double b;
       public:
                Rectangle(double a,double b) :a(a),b(b)
                {
                        this->a=a;
                        this->b=b;
                }
                double Area()
                {
                    return a*b;
                }
                double Perimete()
                {
                    return (a+b)*2;
                }         
};

  • 写回答

3条回答 默认 最新

  • _GX_ 2022-03-06 15:53
    关注

    帮你修改好了

    #include <iostream>
    
    using namespace std;
    
    const double pi = 3.14;
    
    class Shape
    {
    public:
        virtual ~Shape() {}
        virtual double Area() const = 0;
        virtual double Perimeter() const = 0;
    };
    
    class Circle : public Shape
    {
    private:
        double _r;
    
    public:
        Circle(double r) : _r(r) {}
        virtual ~Circle() {}
    
        virtual double Area() const override
        {
            return pi * _r * _r;
        }
    
        virtual double Perimeter() const override
        {
            return 2.0 * pi * _r;
        }
    };
    
    class Rectangle : public Shape
    {
    private:
        double _a;
        double _b;
    
    public:
        Rectangle(double a, double b) : _a(a), _b(b) {}
        virtual ~Rectangle() {}
    
        virtual double Area() const override
        {
            return _a * _b;
        }
    
        virtual double Perimeter() const override
        {
            return (_a + _b) * 2.0;
        }
    };
    
    int main()
    {
    
        double r, a, b;
    
        const char *s[2] = {"Circle:\n", "Rectangle:\n"};
    
        cin >> r >> a >> b;
    
        Shape *ptr[] = {new Circle(r), new Rectangle(a, b)};
    
        for (int i = 0; i < 2; i++)
        {
            cout << s[i];
            cout << "Area:" << ptr[i]->Area() << endl;
            cout << "Perimeter:" << ptr[i]->Perimeter() << endl;
            delete ptr[i];
        }
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程