我在网上看到了这个问题,我想知道我是否正确地这样做。该网站没有列出答案或指南。
问题
仅为抽象类 Animal 编写声明。动物应包含名称和年龄的属性,以及函数显示,设置字段和具体。编写从 Animal 派生的类 Tiger 的声明和实现,其中 Tiger 具有适当的重写函数,使用基类 1。Tiger 具有与条带(整数)和尾长相关的其他数据字段。
如果你能说出我做得是否正确,我会很感激。
动物类
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);
};
如果希望派生类能够重写基类方法,则需要将这些virtual
。否则,派生类将仅隐藏要重写的方法的名称。还应提供虚拟析构函数。
class Animal{
private:
std::string name;
int age;
public:
virtual void display();
virtual void setFields(string, int);
virtual void concrete();
virtual ~Animal() {}
};
目前尚不清楚赋值对抽象基类意味着什么。 通常这意味着至少一个纯虚拟方法没有实现。但是赋值提到在适当的情况下使用基类实现,这意味着你应该在 Animal
中提供一些实现。
抽象类使用纯虚拟成员函数:
class Animal{
private:
string name;
int age;
public:
virtual void display() = 0;
virtual void setFields(string, int) = 0;
virtual void concrete() = 0;
virtual ~Animal() { }
};
并非所有的都一定是纯虚拟的,但至少其中一个必须是为了使类被认为是抽象的。