图形输出(抽象类+多层继承)------已解决

问题:没有按照要求定义设置名称的纯虚函数

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
 
class Shape
{
protected:
    string name;
    double x, y;
public:
    Shape()
    {
        x = 0;
        y = 0;
    }
    virtual string shapeName() = 0;    //virtual string getName() { return name; }
    // 纯虚函数:在基类中不需要实例化的函数可以设为纯虚函数,但在派生类中需要完成对纯虚函数的定义。

    virtual double getX() { return x; }
    virtual double getY() { return y; }
    virtual double getArea() { return 0.0; }
    virtual double getV() { return 0.0; }
 
    virtual void setName(string name_val)
    {
        name = name_val;
    }
    ~Shape(){}
};
 
class Point : public Shape
{
public:
    Point(double x_val, double y_val)
    {
        Shape::x = x_val;
        Shape::y = y_val;
    }
    virtual string shapeName() { return "Point"; }///////////////
    virtual double getX() { return x; }
    virtual double getY() { return y; }
    virtual double getArea() { return 0.0; }
    virtual double getV() { return 0.0; }
    ~Point(){}
};
 
class Circle : public Point
{
private:
    double r;
public:
    Circle(double x_val, double y_val, double r_val) : Point(x_val, y_val)
    {
        r = r_val;
    }
    virtual string shapeName() { return "Circle"; }////////////
    virtual double getX() { return x; }
    virtual double getY() { return y; }
    virtual double getArea() { return 3.14159*r*r; }
    virtual double getV() { return 0.0; }
    virtual double getLen() { return 2*3.14159*r; }
    ~Circle(){}
};
class Cylinder : public Circle
{
private:
    double h;
public:
    Cylinder(double x_val, double y_val, double r_val, double h_val) : Circle(x_val, y_val, r_val)
    {
        h = h_val;
    }
    virtual string shapeName() { return "Cylinder"; }///////////////
    virtual double getX() { return x; }
    virtual double getY() { return y; }
    virtual double getArea() { return 2*Circle::getArea()+Circle::getLen()*h; }
    virtual double getV() { return Circle::getArea()*h; }
};
void print(Shape *p)
{
    cout << p->shapeName() << "--(";
    cout << fixed << setprecision(1) << p->getX() << "," << fixed << setprecision(1) << p->getY() << ")--";
    cout << int(p->getArea()) << "--";
    cout << int(p->getV()) << endl;
}
int main()
{
    double x[3], y[3];
    double r[2], h;
    cin >> x[0] >> y[0];
    cin >> x[1] >> y[1] >> r[0];
    cin >> x[2] >> y[2] >> r[1] >> h;
     
    Shape *p[3];
    p[0] = new Point(x[0], y[0]);
    p[1] = new Circle(x[1], y[1], r[0]);
    p[2] = new Cylinder(x[2], y[2], r[1], h);
 
    print(p[0]);
    print(p[1]);
    print(p[2]);
    return 0;
}

测试数据:

1.1 2.2

3.3 4.4 5.5

6.6 7.7 8.8 9.9

答案:

Point--(1.1,2.2)--0--0

Circle--(3.3,4.4)--95--0

Cylinder--(6.6,7.7)--1033--2408

猜你喜欢

转载自blog.csdn.net/littlsecr/article/details/80522542