抽象类声明

时间:2012-12-02 10:25:41

标签: c++ abstract-class

我在网上看到了这个问题,我想知道我是否正确地做了这个。该网站没有列出答案或指南。

问题

仅为抽象类 Animal 编写声明。 动物应包含名称年龄的属性,以及显示 setFields 和的混凝土即可。编写源自 Animal Tiger 类的声明和实现, Tiger 具有适当的重写函数,使用基类1 。 Tiger 包含与 strip (整数)和 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);
};

2 个答案:

答案 0 :(得分:3)

如果希望派生类能够覆盖基类方法,则需要创建这些virtual。否则,派生类只会隐藏您要覆盖的方法的名称。你还应该provide a virtual destructor

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

目前尚不清楚赋值对 abstract 基类的意义。通常这意味着至少有一个pure virtual method未实现。但是赋值在适当的地方提到了使用基类实现,这意味着你应该在Animal中提供一些实现。

答案 1 :(得分: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() { }
};

并非所有这些都必然是纯虚拟的,但至少其中一个必须是为了将该类视为抽象的。