|
//类中有纯虚函数的类就是抽象类
//该类不能建立实例对象,只能使用指针或者引用
//子类要实现父类的纯虚函数,否则子类也是抽象类
#include <iostream>
using namespace std;
class Shape { public: Shape(){} virtual ~Shape(){} virtual long GetArea()=0; virtual long GetPerim()=0; virtual void Draw()=0; private: }; //抽象类其实是可以实现的 void Shape::Draw() { cout<<"Abstract drawing mechanism! \n"; } // class Circle:public Shape { public: Circle(int radius):itsRadius(radius){} ~Circle(){} long GetArea(){return 3.14*itsRadius*itsRadius;} long GetPerim(){return 2*3.14*itsRadius;} void Draw(); private: int itsRadius; int itsCircumference; };
void Circle::Draw() { cout<<"Circle Draw here\n"; Shape::Draw();//这里能用this->Draw()么? }
class Rectangle:public Shape { public: Rectangle(int len,int width):itsLength(len),itsWidth(width){} virtual ~Rectangle(){} long GetArea(){return itsLength*itsWidth;} long GetPerim(){return 2*itsLength+2*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"; } Shape::Draw(); }
class Square:public Rectangle { public: Square(int len); Square(int len,int width); virtual ~Square(){} long GetPerim() {return 4*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...a Rectangle??"; }
int main() { int choice; bool fQuit=false; Shape *sp; 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; default:fQuit=true; break; } if(fQuit==false) { sp->Draw(); delete sp; cout<<endl; } } return 0; }
|