首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 多型計算幾何體積/表面積:main 中 R 未初始化導致結果錯誤

     編輯:程式設計綜合問答

程式碼定義 `circle`、`sphere`、`cylinder`、`cone` 類別體系,`main()` 中輸入選項與半徑,但輸出結果不正確。

核心 Bug

void main() {
    double R;          // 未初始化
    circle pa;
    pa.display();      // 此處輸入 R,但存入 pa.R(基類成員)
    if (l==1) {
        sphere a;
        a.display(R);  // 傳入區域變數 R(仍為亂碼),而非 a.R
    }
    ...
}
  • `R` 在 `cin >> l;` 後才宣告,且未賦值即傳入 `display(R)`。
  • 基類 `circle::display()` 讀入 `R` 存至 `this->R`,但衍生類另行定義 `display(double R)` **隱藏** 基類虛函式,且使用參數 `R` 而非成員 `R`。

修正方向

  1. `main` 先讀半徑存入變數 `double r; cin >> r;`。
  2. 建構衍生類時傳入半徑:`sphere a(r);`,利用建構子初始化基類成員。
  3. 將 `display()` 宣告為 `virtual void display() = 0;`(純虛函式),衍生類**覆寫**無參數版本,內部直接使用 `R` 成員。
  4. 移除 `display(double R)` 多載,避免隱藏。

修正後即可正確計算球、圓柱、圓錐的表面積與體積。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved