2016-04-24 14 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; 
} 

このコードを実行して(入力用の数値を入力すると)、「test:0」という出力が得られます。このコードは、スクラッチからクラスを作成する私の最初の試みです。誰かが、私が何を入れても、私の出力が私に「0」を与えている理由を簡単に指摘できると確信しています。C++クラスの出力が正しくない

ありがとう!

+0

'set_surfaceArea'に変数を設定します。引数の名前をクラスメンバーと同じ名前以外の名前に変更して、もう一度やり直してください。 – ocket8888

+0

しかし、それは私が設定した入力変数の名前です。私はそれらを別のものに置くべきですか? – Gprice1148

+0

はい、そうです。 – ocket8888

答えて

0

ここの問題は実際には非常に明確です。あなたのコードは、実際にどの変数が使用されているかを知るためにスコープが重要な、全く同じ名前の2つの変数を持つことに苦しんでいます。

例: 'height'をクラスメンバーとして定義しましたが、set_volumeのメソッドパラメータとしても使用できます。したがって、height = height;と書くと、実際に自己割り当てが行われます。この特定の例では、私のコンパイラ(打ち鳴らす)は、この問題を解決するには、エラーメッセージexplicitly assigning value of variable of type 'double' to itself(私は他のコンパイラは、似たようなを生成することを期待)

で、このために警告している、あなたは、変数の一つの名前を変更する必要があります。これがメンバーであることを明確に示すために、クラスメンバーの名前を_heightm_heightまたはmHeightに変更することをお勧めします。 (例としては、既存のスタイルガイドに基づいています)

だから、できるだけ早くあなたがこの問題を修正してきたように、メンバーは0とは異なる値を取得します、しかし、結果はまだあなたが書いたものと同じである:(1/3)

このコードは、整数除算を行っているので、常に0と評価されます。これは整数を別の整数で除算することで定義され、結果としてfloored値が返されます。したがって、この場合、0.333は0にフロアされます。このコードを(1./3.)に置き換えると、この問題が修正されます。

+0

謙遜ではない投稿をありがとう。私は今から 'm_variable'を使うでしょう。私のコードは現在動作しています!再度、感謝します。 – Gprice1148

関連する問題