習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上。。。
阿新 • • 發佈:2018-12-11
C++程式設計(第三版) 譚浩強 習題12.4 個人設計
習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上三者的面積,3個圖形的資料在定義物件時給定。
程式碼塊:
#include <iostream> #include <iomanip> using namespace std; //基類Shape class Shape { public: Shape(){} virtual ~Shape(){} virtual void printArea() const{} virtual void shapeName() const =0; }; class Circle: public Shape { public: Circle(double r){radius=r;} ~Circle(){} virtual void printArea() const {cout<<setw(8)<<"area="<<3.14159*radius*radius<<endl;} virtual void shapeName() const {cout<<"Circle ";} protected: double radius; }; class Rectangle: public Shape { public: Rectangle(double a, double b){x=a; y=b;} ~Rectangle(){} virtual void printArea() const {cout<<setw(5)<<"area="<<x*y<<endl;} virtual void shapeName() const {cout<<"Rectangle ";} protected: double x, y; }; class Triangle: public Shape { public: Triangle(double a, double h){x=a; y=h;} ~Triangle(){} virtual void printArea() const {cout<<setw(6)<<"area="<<(x*y)/2<<endl;} virtual void shapeName() const {cout<<"Triangle ";} protected: double x, y; }; int main() { Circle c(5); Rectangle rec(3, 4); Triangle tr(4, 5); Shape *pt; pt=&c; pt->shapeName(); pt->printArea(); pt=&rec; pt->shapeName(); pt->printArea(); pt=&tr; pt->shapeName(); pt->printArea(); system("pause"); return 0; }