我在网上看到了这个问题,我想知道我是否正确地做了这个。该网站没有列出答案或指南。
问题
仅为抽象类 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);
};
答案 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() { }
};
并非所有这些都必然是纯虚拟的,但至少其中一个必须是为了将该类视为抽象的。