问题:没有按照要求定义设置名称的纯虚函数
#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"; }///
~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 getArea() { return 3.14159*r*r; }
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()+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