作者 主題: 抽象類別實作介面  (閱讀 3293 次)

0 會員 與 1 訪客 正在閱讀本文。

kiei

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
抽象類別實作介面
« 於: 2012-06-20 16:25 »
請高手指教這個程式碼怎麼寫? 謝謝!!!

題目:
請使用C++撰寫三個類別(class):shape(形狀)、circle(圓形)與rectangle(矩形),其中shape 為抽象類別(abstract class),而circle 與rectangle 為衍生類別(derived class),均繼承shape。請在shape 中定義兩個介面(interface),分別作為運算週長(circumference)與面積(area)的介面,並在circle 與rectangle 中分別實作其功能。

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5405
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: 抽象類別實作介面
« 回覆 #1 於: 2012-06-20 16:32 »
作業嗎?

一般在 C++ 的書上教到 OO 那一段的地方, 應該就會有與你說的類似的程式了.

kiei

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
Re: 抽象類別實作介面
« 回覆 #2 於: 2012-06-20 17:29 »
不是作業耶

是參加國家考試的題目
我有寫了一個程式,但執行不出來,不知是哪裡寫錯了?
可以麻煩高手指教指教嗎?手邊沒有參考書..xd..

01#include <iostream>
02using namespace std;
03const double pi=3.14159;
04class shape {
05 public:
06  //shape( char *whatis = "shape");
07  virtual int circumference() = 0;
08  virtual int area() = 0;
09}
10class circle : public shape {
11 public:
12  int circumference(int r) {
13   return (int)(2* pi* r);
14  }
15  int area(int r) {
16   return (int)(r*r* pi);
17  }
18}
19class rectangle : public shape {
20 public:
21  int circumference(int L, int W ) {
22   return (int)((L+W)*2);
23  }
24  int area(int L, int W ) {
25   return (int)(L*W);
26  }
27}
28int main(){
29 circle c1;
30 rectangle r1;
31 cout<< "圓週長"<<c1. circumference(6)<<endl;
32 cout<< "圓面積"<<c1.area (6)<<endl;
33 cout<< "方週長"<<c1. circumference(3,4)<<endl;
34 cout<< "方面積"<<c1.area (3,4)<<endl;
35system("pause");
36return 0;
37}

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5405
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: 抽象類別實作介面
« 回覆 #3 於: 2012-06-20 17:36 »
你也許該先學 C++ 的語法吧.

你寫的程式, 自己找個 C++ compiler 編譯一下, 就會告訴你那邊有錯了.
1. 有些地方有沒有分號差很多.
2. 參數一不一樣也差很多.

以 OO 的角度來看, 你寫的東西算是對的.
不過.... 寫出來的東西, 並不符合 C++ 規定的語法.
« 上次編輯: 2012-06-20 17:39 由 twu2 »

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
Re: 抽象類別實作介面
« 回覆 #4 於: 2012-06-21 10:33 »
1. class 的大括號最後要加上 ;
例如:
代碼: [選擇]
class circle {
  // 省略
};

2. 沒有 override 到 shape 定義的兩個 virtual function
你 circle 跟 rectangle 定義的 circumference 與 area 都有參數, shape 裡的沒有,所以沒有 override 到。

3. main 裡輸出方周長與方面積的地方,寫錯了。
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org