2016-04-16 9 views
0

私はこれが最初のプログラミング言語であり、私は初心者です。そして、これには明らかな答えがあると確信しています。C++クラスメンバー奇数を返す

しかし、何らかの理由で、単一のカスタムクラスを持つこの単純なプログラムは、あるカスタムクラスのプライベートメンバーを呼び出すGet関数から非常に奇妙な値を返しています。

プログラムは次の3つのファイルに分かれています。 Shapes.h

#include <iostream> 
#include <cmath> 
#include <string> 
#include <cctype> 

using namespace std; 


class Cube 
{ 
    public: 
    Cube(); 
    Cube(double); 
    double GetSA() const; 
    double GetSide() const; 

    private: 
    double SA; 
    double V; 
    double Side; 
}; 

コンストラクタが含まれていShapes.cppと呼ばれる別のファイルと呼ばれる1クラスのヘッダファイルとして、その後

#include <iostream> 
#include <cmath> 
#include <string> 
#include <cctype> 
#include "Shapes.h" 

using namespace std; 

int main() 
{ 
    double test=20.0; 
    Cube D(test); 
    cout<< D.GetSA()<<endl<<D.GetSide(); 
    return 0; 
} 

。このプログラムは、それがGetSAアクセサ関数の6.95293e-310の値を返し、サイド機能のための200の値を返す実行され、何らかの理由で

#include <iostream> 
#include <cmath> 
#include <string> 
#include <cctype> 
#include "Shapes.h" 

Cube::Cube() 
{ 
    V=0.0; 
    SA=0.0; 
    Side=0.0 
} 

Cube::Cube(double Side2) 
{ 
    Side=Side2; 
} 

double Cube::GetSA() const 
{ 
    return SA; 
} 

double Cube::GetSide() const 
{ 
    return Side; 
} 

これがなぜ起こっているのか、それを修正する方法についてのアイデアはありますか?

+2

'Cube :: Cube(double Side2)'で 'SA'や' V'を初期化しません。これらは、そのアドレスのメモリにあったランダムな値を含むことがあります。 – drescherjm

+0

それは意味がありますが、なぜGetSideアクセサのために200を得ていますか? – Zygodactyl546

+0

20.0にする必要があります。私はなぜそれが200になるのか分かりません。 – drescherjm

答えて

2

デフォルトのコンストラクタを呼び出してみてください。それはデータメンバーを正しく初期化するようです。パラメータ化されたコンストラクタは、Sideデータメンバのみを初期化するだけで、他のデータメンバは初期化しません。

関連する問題