2017-03-26 7 views
-2

次のコードがあります。列挙子用のgetterおよびsetterメソッドを作成しようとしています。誰かが私のコードを修正してください多くの試みの後に私はまだエラーが発生します。これに助けてくれてありがとう!列挙子C++のsetterおよびgetterメソッド

///in the header file 

    class Car{ 

    private:  

     enum weight{small, medium, large}; 
    public: 


     Car(); 


     int getWeight() const; 



     void setWeight(weight w); 

    }; 
////// in the car.cpp file 
//default constructor 
Car::Car(){ 

    weight =small; 

} 

     weight Car::getWeight() const{ 
     return weight; 
     } 



     void Car::setWeight(weight w){ 
     weight = w; 
     } 
+0

エラーを投函してください。 'getWeight'は' int'を返すと宣言されていますが、 'weight'を返すと定義されているため、エラーがあると仮定しています。 – Gambit

+0

あなたはエラーを受けていますが、なぜあなたはそれらを投稿していませんか? –

答えて

0

問題1:

enum weight{small, medium, large}; 

型ではなく、変数の宣言です。このポイントの後に、あなたが設定して得ることができるタイプweightの変数を作ることができます。

enum weight 
{ 
    small, medium, large 
}; 
weight mWeight; 

を使えば、今あなたがゲッターとセッターを使用することができ、mWeight、クラスのメンバを持っています。

しかし、まだそれほど良いことはありません。

問題2:

weightprivateあるので、クラス外部の誰もそれが不可能呼び出し側はweightを関数に渡すことはできませんvoid setWeight(weight w);のために作る、このタイプを見ていないし、使用することができます。

は簡単公衆ブロックにenum weightの定義を移動した後weight、それを必要とするクラス内のすべてのユーザーに表示されるようにpublicprivateブロックの順序を交換することによって解決しました。

class Car 
{ 
public: 
    enum weight 
    { 
     small, medium, large 
    }; 


    Car(); 

    int getWeight() const; 

    void setWeight(weight w); 

private: 
    weight mWeight; 
}; 

問題3:

int getWeight() const; 

weight Car::getWeight() const 

正しいバージョンが体重を返すと思わ間に不一致があり

、そう

class Car 
{ 
public: 
    enum weight 
    { 
     small, medium, large 
    }; 


    Car(); 

    weight getWeight() const; 

    void setWeight(weight w); 

private: 
    weight mWeight; 


}; 

問題4:

weightのようなものはありません。ズールしかありません。ごめんなさい。 Car::weightなので、コンパイラが関数の一部であることが分かるまで、Carを明示する必要があります。

weight Car::getWeight() const{ 
    return weight; 
    } 

Car::weight Car::getWeight() const{ 
    return weight; 
    } 

サイドノートになる必要があります:あなたは制限なしでセッターとゲッターを持っている場合あなたが同様に変数publicになるかもしれません。メンバー変数privateを作成する全体のポイントは、オブジェクトの状態を保護することです。誰かが気づかずに変数を無制限に変えることができる外部の人がいれば、バグを辿るのが難しくなります。

上記のような単純なケースではそれほど重要ではありませんが、カウンタを持つクラスがあり、そのカウンタが42に達すると、何か重要なことが起こるはずです。そして、いくつかのジョーカーが一緒に来て、このセッターを使用します。

void setImportantNumber(int val) 
{ 
    importantNumber = val; 
} 

値を43に設定しますか?カプセル化はカプセル化に違反したため、誰にもうまく行かなかった。一方、

この

void setImportantNumber(int val) 
{ 
    if (val) < 42) 
    { 
     importantNumber = val; 
    } 
    else if (val == 42) 
    { 
     importantNumber = 0; 
     doSomethingImportant(); 
    } 
    else 
    { 
     cerr << "I'm afraid I can't let you do that, Dave.\n" 
    } 
} 

は愚かさのいくつかの量を防ぐことができます。

+0

ありがとう。これは本当に役に立ちました。 – Mary

0

上記の情報を参考にして、コードを以下のように変更しました。ありがとう!

//Car.h:  
enum weight 
    { 
     small, medium, large 
    }; 


class Car{ 
private: 
    weight mWeight; 

public: 
    Car(); 
    weight getWeight() const; 
}; 


//Car.cpp file 
    Car::Car(){  
    mWeight = large; 

} 

weight Car::getWeight() const{ 
    return mWeight; 
} 
関連する問題