問題1:
enum weight{small, medium, large};
型ではなく、変数の宣言です。このポイントの後に、あなたが設定して得ることができるタイプweight
の変数を作ることができます。
enum weight
{
small, medium, large
};
weight mWeight;
を使えば、今あなたがゲッターとセッターを使用することができ、mWeight
、クラスのメンバを持っています。
しかし、まだそれほど良いことはありません。
問題2:
weight
がprivate
あるので、クラス外部の誰もそれが不可能呼び出し側はweight
を関数に渡すことはできませんvoid setWeight(weight w);
のために作る、このタイプを見ていないし、使用することができます。
は簡単公衆ブロックにenum weight
の定義を移動した後weight
、それを必要とするクラス内のすべてのユーザーに表示されるようにpublic
とprivate
ブロックの順序を交換することによって解決しました。
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"
}
}
は愚かさのいくつかの量を防ぐことができます。
エラーを投函してください。 'getWeight'は' int'を返すと宣言されていますが、 'weight'を返すと定義されているため、エラーがあると仮定しています。 – Gambit
あなたはエラーを受けていますが、なぜあなたはそれらを投稿していませんか? –