105年警察人員特種考試資訊管理人員三等物件導向程式設計
一、你是個物件導向程式設計師,你首先寫了兩個 C++ 的類別,其程式碼如下: Class Rectangle { private: float width; float height; public: Rectangle(float width, float height) : width(width), height(height) { } float getArea( ) const { return width * height; } }; Class Circle { private: float radius; public: Circle(float radius): radius(radius) { } float getArea( ) const { return 3.14159f * radius * radius; } }; 然後你繼續寫一個 main( ) 來完成你的實作。你的同事會幫你完成一個generateData( ) 的副程式,它會負責產生一堆 Rectangle 或 Circle 裝在一個 vector container,然後回傳。你的目標是將 vector container 裡面的每一個物件的面積通通加總。 int main( ) { ... ... = generateData( ); ... } 你想要用多形 (polymorphism) 來完成這件事情。請撰寫未完成的 main( )以及你需要對 Rectangle, Circle 兩個 class 的原始程式碼做任何的修改。(25分) |
答:
#include <iostream> #include <vector> using namespace std; class Shape { public: virtual float getArea( ) const {return 0;}; }; class Rectangle:virtual public Shape { private: float width; float height; public: Rectangle(float width, float height) : width(width), height(height) { } float getArea( ) const { return width * height; } }; class Circle:virtual public Shape { private: float radius; public: Circle(float radius): radius(radius) { } float getArea( ) const { return 3.14159f * radius * radius; } }; vector <Shape *> generateData( ) { vector<Shape *> v1; v1.push_back(new Rectangle(5.5f, 8.7f)); v1.push_back(new Circle(2)); v1.push_back(new Circle(8)); v1.push_back(new Rectangle(3.0f, 5.1f)); return v1; } int main(void) { vector<Shape *> v1; v1 = generateData( ); vector <Shape *>::iterator Iter; float sum = 0; for(Iter = v1.begin( ); Iter != v1.end( ) ; Iter++) { // cout << (*Iter)->getArea() << endl; sum = sum+(*Iter)->getArea( ); } cout << "加總面積 = " << sum << endl; return 0; } |
執行結果:
加總面積 = 276.778
※參考資料:
1.http://users.cis.fiu.edu/~weiss/cop4338_spr09/assignments/Assign4.cpp
2.http://docwiki.embarcadero.com/CodeExamples/Berlin/en/Generic_vector_sort_%28C%2B%2B%29
3.https://msdn.microsoft.com/zh-tw/library/s5bta5ha.aspx
4.https://zh.wikipedia.org/wiki/Vector_%28STL%29