64,637
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
using namespace std;
class Shape {
public:
Shape() {}
virtual ~Shape() {}
virtual double GetArea() = 0;
virtual double GetPerim() = 0;
virtual void Draw() = 0;
};
class Circle : public Shape {
public:
Circle(int radius) : itsRadius(radius) {}
virtual ~Circle() {}
double GetArea() {
return 3.14 * itsRadius * itsRadius;
}
double GetPerim() { return 2 * 3.14 * itsRadius; }
void Draw();
private:
int itsRadius;
};
void Circle::Draw() { cout << "Circle drawing routing here!\n"; }
class Rectangle : public Shape {
public:
Rectangle(int len, int width) : itsLength(len), itsWidth(width) {}
virtual ~Rectangle() {}
double GetArea() { return itsLength * itsWidth; }
double GetPerim() { return 2 * itsLength * itsWidth; }
virtual int GetLength() { return itsLength; }
virtual int GetWidth() { return itsWidth; }
void Draw();
private:
int itsWidth;
int itsLength;
};
void Rectangle::Draw() {
for (int i = 0; i < itsLength; i++) {
for (int j = 0; j < itsWidth; j++) cout << "x ";
cout << "\n";
}
}
class Square : public Rectangle {
public:
Square(int len);
Square(int len, int width);
virtual ~Square(){};
double GetPerim() { return 4 * GetLength(); }
double GetArea() { return GetLength() * GetLength(); }
};
Square::Square(int len) : Rectangle(len, len) {}
Square::Square(int len, int width) : Rectangle(len, width) {
if (GetLength() != GetWidth()) cout << "error not a Square!\n";
}
int main() {
int choice;
Shape *sp;
bool fQuit = false;
while (fQuit == false) {
cout << "(1)Circle (2)Rectangle (3)Square (0)Quit:";
cin >> choice;
switch (choice) {
case 1:
sp = new Circle(5);
break;
case 2:
sp = new Rectangle(4, 6);
break;
case 3:
sp = new Square(5);
break;
case 0:
fQuit = true;
break;
}
if (fQuit==false) {
sp->Draw();//编译时这行出错,应该是sp没有在switch中建立派生类对象,导致仍是抽象类指针.但我从流程上看并没有错的地方.求高手帮忙解惑.
delete sp;
cout << endl;
}
}
return 0;
}