问题:没有按照要求定义设置名称的纯虚函数
#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