2016-08-31 10 views
3

C++を使い始めました。質問があります。クラスメンバ変数はどこで初期化する必要がありますか?メンバー関数を使ってメンバー変数に値を割り当てました。しかし、静的解析ツールは、コンストラクタのメンバ初期化について不平を言っています。たとえば、以下を参照してください。C++でClassのメンバー変数を初期化する場所

TEST.CPPここ

#include<iostream> 
using namespace std; 

class Point { 
private: 
    int x; 
    int y; 
public: 
    Point(int r) 
    { 
     y = r; 
    } 

    inline void setXval(int x_val) { 
     x = x_val; 
    } 
}; 

、そのツールは、xがコンストラクタで初期化されていないことを言います。しかし、私はメンバー関数のx値を設定しています。これを行う正しい方法ですか、またはデフォルトのコンストラクタのすべてのメンバーを常に初期化する必要がありますか?どんな助けも大歓迎です。前もって感謝します !

+1

このクラスの定義は次のとおりです。 'struct Point {int x、y; }; '。単純にする。 –

+0

ありがとう@ Cheersandhth.-Alf。私はそれを知っていますが、学習目的のために私は求めています。そのアプローチで何が間違っていますか? – mehtame026

+0

これは冗長性だけを追加します。さらに、いくつかの最適化を防ぐことができます。だからそれは負の値です。 –

答えて

2

すべての変数は、コンストラクタで明示的な値を取得する必要があります。 xに値を与えていないので、ツールは正しいです。 xの値を設定するメンバ関数を呼び出すかどうかを指定することはできません - xの値がどこかにある前に、あなた(またはコードのユーザ)がその関数を呼び出すことはカウントできません。

+0

ありがとう@Brick。私はあなたの意見を持っています。これは私が探しているものです。私はこの投稿を解決済みとしてマークします。感謝します ! – mehtame026

1

あなたのツールを使用すると、初期化子リストを使用することを望む:

class Point { 
private: 
    int x; 
    int y; 
public: 
    Point(int x, int y) : x(x), y(y) {} 
}; 
1

あなたは、コンストラクタ内のすべてのクラスのメンバを構築する必要があります。 メンバ関数は、クラスメンバの値を変更できますが、メンバ関数を構築することはできません。

Point(int _x, int _y): x(_x), y(_y) {} 
関連する問題