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

Popular posts from this blog

How to write data into a excel file using vbscript

Format date as yyyy-mm-dd using vbscript