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

arrow
arrow
    文章標籤
    物件導向程式設計
    全站熱搜

    jacksaleok 發表在 痞客邦 留言(0) 人氣()