2016-04-24 306 views
-1
#include <iostream> 

using namespace std; 


class Pyramid{ 

    public: 
     Pyramid(); 
     void set_surfaceArea(double, double, double); 
     void set_volume(double, double); 
     double get_surfaceArea(); 
     double get_volume(); 
     void print_sufraceArea(); 
     void print_volume(); 


    private: 
     double height, 
        sideLength, 
        perimeter, 
        baseArea, 
        surfaceArea, 
        volume; 
}; 

Pyramid::Pyramid(){ 
    height = 0; 
    baseArea = 0; 
    perimeter = 0; 
    sideLength = 0; 
} 

void Pyramid::set_surfaceArea(double baseArea, double sideLength, double perimeter){ 
    baseArea = baseArea; 
    sideLength = sideLength; 
    perimeter = perimeter; 
} 

void Pyramid::set_volume(double baseArea, double height){ 
    baseArea = baseArea; 
    height = height; 
} 

double Pyramid::get_surfaceArea(){ 
    return (1/2) * baseArea * perimeter * sideLength; 

} 

double Pyramid::get_volume(){ 
    x = (1/3) * baseArea * height; 
    return x; 
} 


int main(){ 
    double height, 
       test, 
       sideLength, 
       perimeter, 
       baseArea; 
    cout << "Enter height: "; 
    cin >> height; 
    cout << "Enter side length: "; 
    cin >> sideLength; 
    cout << "Enter perimeter: "; 
    cin >> perimeter; 
    cout <<"Enter base area: "; 
    cin >> baseArea; 

    Pyramid x; 

    x.set_surfaceArea(baseArea, sideLength, perimeter); 
    x.set_volume(baseArea, height); 

    test = x.get_volume(); 
    cout << "test: " << test << endl; 
} 

當我運行此代碼(並輸入數字輸入),我得到「測試:0」的輸出。這段代碼是我第一次嘗試從頭開始創建一個類。我相信有人可以很容易地指出爲什麼我的輸出給我'0',無論我放什麼。C++類輸出不正確

謝謝!

+0

在'set_surfaceArea'中,您設置的變量等於它們自己。只需將參數重新命名爲與班級成員相同的內容即可,然後重試。 – ocket8888

+0

但這是我設置的輸入變量的名稱。我應該把它們設置爲別的嗎? – Gprice1148

+0

是的,這就是我的意思。 – ocket8888

回答

0

這裏的問題其實很清楚。你的代碼受到2個具有完全相同名稱的變量的困擾,其中範圍很重要,以便知道實際使用哪個變量。

一個示例:您已將'height'定義爲類成員,但也是set_volume的方法參數。所以,如果你寫height = height;你實際上正在做一個自我分配。對於這個特定的例子,我的編譯器(clang)正在警告這個錯誤消息explicitly assigning value of variable of type 'double' to itself(我希望其他編譯器能產生類似的東西)

要解決這個問題,你必須重命名一個變量。我建議將班級成員重命名爲_height,m_heightmHeight,以便清楚地表明這是一名成員。 (例子是基於現有的風格指南)

所以,只要你已經解決了這個問題,各成員將獲得從0不同的值,但是結果還是一樣的,你已經寫了:(1/3)

此代碼將始終評估爲0,因爲您正在進行整數除法。這被定義爲將整數除以另一個整數,這會導致結果的地址值。因此,在這種情況下,0.333被取消爲0.替換此代碼(1./3.)解決了此問題。

+0

謝謝你的帖子,不居高臨下。我從現在開始很可能會使用'm_variable'。我的代碼現在正在工作!再次感謝。 – Gprice1148