Abstract Class Implementation Bar Chart Exam Questions
抽象類別實作長條圖考題
如下圖,BarChart(長條圖)是一個抽象類別,長條圖中每一條的長度儲存在 bars
裡面,可以用 addBar()增加一條新的資料,並指定其長度(length),另有 plot()是一
個 pure virtual function(或稱為 abstract method),負責繪出長條圖;HorizontalBarChart
繼承 BarChart,實作 plot(),以水平方向繪製長條圖;VerticalBarChart 則繼承 BarChart,
以垂直方向繪製長條圖。請以 C++或 Java 回答以下問題:
(一)寫出 BarChart 類別宣告與實作。(8 分)
(二)寫出 HorizontalBarChart 類別宣告與實作。例如,假設 bars 包含 3 筆資料,依序為
3, 10, 8,則副程式 plot()應該在 console 以文字方式繪出以下圖形。(9 分)
3 ***
10 **********
8 ********
(三)若有一個宣告為 VerticalBarChart 的 pointer(或 reference)變數 p,請問 p 是否可以
轉型(cast)為 HorizontalBarChart 或 BarChart 的 pointer(或 reference)?
答案
以下用java語言回答
(一)
Import java.util.ArrayList;
abstract class BarChart{
protect ArrayList<int> bars=new ArrayList<int>();
public void addBar(int length){
bars.add(length);
}
public abstract void plot (){};
}
(二)
class HorizontalChart extends BarChart {
public void plot(){
string star="";
for(int length:bars){
star="";
for(int i=0;i<length;i++){
star+="*";
}
System.out.println(length+" "+star);
}
}
}
(三)
宣告為 VerticalBarChart 的 pointer(或 reference)變數 p可以轉型(cast)為 H BarChart 的 pointer(或 reference
因為java有多型性,用向上轉型(up casting)可以將子類別實例轉為父類別實例。
在Java中,如果有一個抽象類別 `a`,並且有兩個子類別 `b` 和 `c`,則 `c` 類別的指標變數是可以轉型為 `a` 類別的指標變數。
這涉及到Java中的多型性。你可以使用向上轉型(upcasting)來將子類別的實例轉型為其父類別的實例。在這種情況下,你可以將 `c` 類別的實例轉型為 `a` 類別的實例。
示例程式碼如下:
```java
abstract class A {}
class B extends A {}
class C extends A {}
public class Main {
public static void main(String[] args) {
C cInstance = new C();
// 向上轉型,將 C 類別的實例轉為 A 類別的實例
A aInstance = cInstance;
// 或者直接將 C 類別的指標變數轉型為 A 類別的指標變數
A anotherAInstance = (A) cInstance;
}
}
```
在這個例子中,`cInstance` 是 `C` 類別的實例,我們可以將它向上轉型為 `A` 類別的實例。你也可以直接將 `C` 類別的指標變數轉型為 `A` 類別的指標變數。
Comments
Post a Comment