followigクラスをしましょう
class Animal
{
public:
virtual short getFeet() = 0;
virtual void setFeet(short feet) = 0;
};
および2つの派生クラス:
class Bird : public Animal
{
short flying_speed;
public:
virtual short getFeet() { return 2; } // always 2 feet
virtual void setFeet(short feet_) { };
virtual short getFlyingSpeed() { return flying_speed; }
};
class Mammal : public Animal
{
short feet; // whale: 0 feet, human: 2 feet, others: 4 feet
public:
virtual short getFeet() { return feets; }
virtual void setFeet(short feet_) { feet = feet_ };
};
A)オブジェクトモデルに関連する質問:
プロパティの足に焦点を当てましょう。アトリビュートフィートとメソッドgetFeet()およびsetFeet()をどうするか。
同じカテゴリに属する一部の動物は足の量が異なるため、属性の足とメソッドを使用し、getFeet()
一般setFeet()
的です。
一部の動物は同じ足の量を持っているため、独自の属性を使用しませんfeet
。メソッドgetFeet()
は定数を返しますが、メソッドsetFeet()
は何もしません。
このモデルは正しいですか、それとも可変足に関連する変更が推奨されていますか(足のない動物がたくさんいます)?
B)多型に関する質問
1つのカテゴリには特定の機能があります。たとえば、飛んでいる鳥。したがって、彼らが飛んでいる速度を尋ねるのは理にかなっています。方法を参照してくださいgetFlyingSpeed()
。
Bird
ポリモーフィズムを使用して、 :を指すポインターを作成します。
int main(int argc, _TCHAR* argv[])
{
Animal *a = new Bird();
std:: cout << a->getFlyingSpeed() << '\t'; // error!
}
コンパイラはコンパイル中ではなく正しい割り当てをチェックすると思いましたが、両方のタイプのランタイムチェックしかありません。しかし、私は間違っていました...
エラーC2039::はの
getFlyingSpeed
メンバーではありませんAnimal
すべてのクラスに共通ではない属性をポリモーフィズムと一緒に使用する方法はありますか?または、ランタイムタイプのchcekのみを強制できますか?
たぶん、このモデルは正しくありません。それをやり直す方法は?
ご協力いただきありがとうございます。