-1

この質問をオンラインで見ました。これを正しく行っているかどうかを知りたいです。このサイトには、回答やガイドは記載されていません。

質問

抽象クラスAnimalのみの宣言を記述します。Animalにはnameageの属性と、関数displaysetFields、およびConcreteが含まれている必要があります。Animalから派生したクラスTigerの宣言と実装を記述し、適切な関数をオーバーライドしたTigerを使用して、基本クラスのものを使用します。Tigerには、strips (整数) とtailLengthに関連付けられた追加のデータ フィールドがあります。

私が正しく行っているかどうかを教えていただければ幸いです。

動物クラス

 class Animal{
  private:
  string name;
  int age;
  public:
  void display();
  void setFields(string, int);
  void concrete();
};

タイガークラス

 class Tiger:public Animal{
 private:
 int strips;
 int tailLength;
 public:
 void display();
 void setFields(string, int, int, int);
};
4

2 に答える 2

3

派生クラスで基底クラスのメソッドをオーバーライドできるようにする場合は、これらをvirtual. そうしないと、派生クラスは、オーバーライドしようとしていたメソッドの名前を隠すだけです。仮想デストラクタも提供する必要があります。

class Animal{
  private:
  std::string name;
  int age;
  public:
  virtual void display();
  virtual void setFields(string, int);
  virtual void concrete();
  virtual ~Animal() {}
};

抽象基本クラスに関する代入が何を意味するのかは明らかではありません。通常、これは、少なくとも 1 つの純粋仮想メソッドが実装されていないことを意味します。ただし、割り当てでは、必要に応じて基本クラスの実装を使用することが言及されています。これは、 でいくつかの実装を提供する必要があることを意味しますAnimal

于 2012-12-02T10:30:38.490 に答える
2

抽象クラスは、純粋仮想メンバー関数を使用します。

class Animal{
  private:
  string name;
  int age;
  public:
  virtual void display() = 0;
  virtual void setFields(string, int) = 0;
  virtual void concrete() = 0;
  virtual ~Animal() { }
};

それらのすべてが必ずしも純粋な仮想であるとは限りませんが、クラスが抽象と見なされるためには、それらの少なくとも 1 つが純粋な仮想である必要があります。

于 2012-12-02T10:32:33.153 に答える