一道C 類多型繼承題的辛酸歷程

2021-08-14 07:30:05 字數 1660 閱讀 6629

定義乙個抽象類shape用以計算面積,從中派生出計算長方形、梯形、圓形面積的派生類。程式中通過基類指標來呼叫派生類中的虛函式,計算不同形狀的面積。(盡量用抽象類和虛函式做,實在不會不用也行)

第一行輸入乙個字串,表示要計算的幾何圖形型別,cfx表示長方形,tx表示梯形,yx表示圓形。

第二行輸入若干正數,如是長方形則輸入的資料分別表示長和寬,如果是梯形則分別表示上底、下底和高,如果是圓形則表示半徑。(圓周率取3.14)

輸出對應的面積,精確到2位小數。

cfx5 7

35.00

在這裡放上原題。

由題意可知要由乙個基類派生出三個派生子類,並使類具有抽象性質,之後運用虛函式,計算出不同形狀圖形的面積。最重要的是運用基類的指標來指向三個派生類的物件來實現面積的計算。

首先回顧一下基類指標的知識,通過基類的指標可以指向該基類的物件,也可以指向基類派生的物件。但是有一點,該指標具有「長度」,即只會輸出該指標型別的類中的資料成員,**如下。

#include#include#include#include#include#includeusing namespace std;

class student;

student::student(int n,string nam,float s)

void student::display()

在該程式中,試圖使用p指向gradu的display(),但是輸出結果如下

1001 l1 87.5

2001 wang 98.5

也就是說指標不會輸出派生類的派生屬性。

所以在這裡就要引入虛函式,從而可以列印出相應的結果。

所以初步**如下:

#include#include#include#include#include#includeusing namespace std;

class shape

virtual void square();

protected:

double num;

};class rec:public shape

protected:

double length;

double width;

};class tra:public shape

protected:

double up_length;

double down_length;

double height;

};class circle:public shape

protected:

double r; };

int main()

else if(c=="tx")

if(c=="yx")

return 0;

}

但是在除錯時出現

1、undefined reference to `vtable for shape'

2、[error] ld returned 1 exit status

第二個原因通常出現在執行視窗沒有關閉,從而導致程式返回值出錯

然而第乙個是為什麼?

是因為函式宣告不規範,在基類的虛函式中,沒有對其進行定義,從而導致函式宣告不規範出錯,所以,細心才是真啊!

一道題跟java多型和繼承相關

class base public void tellname public void printname public class dervied extends base public void tellname public void printname public static void ...

關於C 的一道題

閱讀下面程式,然後請寫出輸出結果 cpp view plaincopy include using namespace std int main void 輸出結果如下圖 分析 為什麼會這樣的結果呢?首先我們先分析一下程式,首先我們先看看第一組a和b,那麼a和b是什麼呢?根據我們所學,我們知道a和b...

一道題 測試你對多型的了解?

題目 根據題目,寫出自己的答案 多型練習 author public class moremodule class a public string show a obj class b extends a public string show a obj class c extends b clas...