-1

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

问题

仅为抽象类Animal编写声明。Animal应该包含nameage的属性,以及函数displaysetFieldsconcrete编写从Animal派生的类Tiger的声明和实现,Tiger具有适当的重写函数,使用基类 one。Tiger具有与条带(整数)和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() {}
};

目前尚不清楚分配对抽象基类意味着什么。通常这意味着至少有一个纯虚方法没有实现。但是作业提到在适当的情况下使用基类实现,这意味着您应该在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() { }
};

并非所有这些都一定是纯虚拟的,但至少其中之一必须是为了使该类被认为是抽象的。

于 2012-12-02T10:32:33.153 回答