酷!學園

技術討論區 => 程式討論版 => C/C++程式設計討論區 => 主題作者是: kiei 於 2012-06-20 16:25

主題: 抽象類別實作介面
作者: kiei2012-06-20 16:25
請高手指教這個程式碼怎麼寫? 謝謝!!!

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

一般在 C++ 的書上教到 OO 那一段的地方, 應該就會有與你說的類似的程式了.
主題: Re: 抽象類別實作介面
作者: kiei2012-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}
主題: Re: 抽象類別實作介面
作者: twu22012-06-20 17:36
你也許該先學 C++ 的語法吧.

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

以 OO 的角度來看, 你寫的東西算是對的.
不過.... 寫出來的東西, 並不符合 C++ 規定的語法.
主題: Re: 抽象類別實作介面
作者: elleryq2012-06-21 10:33
1. class 的大括號最後要加上 ;
例如:
代碼: [選擇]
class circle {
  // 省略
};

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

3. main 裡輸出方周長與方面積的地方,寫錯了。