
c++基础-动态关联,设计一个类animal和它的派生类tiger(虎)、sheep(羊),实现虚函数
发布日期:2021-05-08 09:42:05
浏览次数:18
分类:精选文章
本文共 1488 字,大约阅读时间需要 4 分钟。
C++动物类设计与虚函数实现
在本次的项目中,我们将设计一个基类animal
,并创建其派生类tiger
和sheep
。通过这个例子,我们将学习如何使用虚函数,以及如何实现多态性。
类的设计与成员变量
基类animal
中,我们定义了一个成员变量sex
,用于表示动物的性别。这个变量将被所有派生类继承并初始化。与此同时,每个动物都需要定义自己的叫声和食物类型,因此我们将在派生类中分别实现这些功能。
派生类实现
1. 虎(Tiger)
派生类tiger
继承自animal
。在tiger
中,我们实现了以下两个虚函数:
- soar():表示动物的飞翔行为。在
tiger
中,飞翔时会发出“Ao~~”的声音。 - eat():表示动物的吃东西行为。在
tiger
中,它会吃肉。
class tiger : public animal {public: virtual void soar() { cout << "Tiger's soar: Ao~~" << endl; } virtual void eat() { cout << "Tiger eats meat!" << endl; }};
2. 羊(Sheep)
派生类sheep
同样继承自animal
。在sheep
中,我们实现了以下两个虚函数:
- soar():表示动物的飞翔行为。在
sheep
中,飞翔时会发出“Baa~~”的声音。 - eat():表示动物的吃东西行为。在
sheep
中,它会吃草。
class sheep : public animal {public: virtual void soar() { cout << "Sheep's soar: Baa~~" << endl; } virtual void eat() { cout << "Sheep eats grass!" << endl; }};
实例化与运行
在main
函数中,我们创建了四个对象:
- 两个
tiger
对象:t1
和t2
- 两个
sheep
对象:s1
和s2
将这些对象存储在一个指针数组array
中。通过循环,我们调用每个对象的eat()
和soar()
方法。
int main() { tiger t1, t2; sheep s1, s2; animal *array[4] = {&s1, &s2, &t1, &t2}; for (int i = 0; i < 4; i++) { array[i]->eat(); array[i]->soar(); } return 0;}
输入与输出
在程序运行时,用户将被提示输入动物的性别。假设所有输入均为“male”,运行结果如下:
Please enter the sex of the animal:male
输出将包括每个动物的叫声和食物类型:
Tiger's soar: Ao~~Tiger eats meat!Sheep's soar: Baa~~Sheep eats grass!Tiger's soar: Ao~~Tiger eats meat!Sheep's soar: Baa~~Sheep eats grass!
总结
通过本次练习,我们掌握了如何设计基类与派生类,以及如何实现虚函数和多态性。这种设计方式使得代码具有高度的可扩展性,可以轻松添加新的动物类型。
发表评论
最新留言
不错!
[***.144.177.141]2025年03月26日 19时14分11秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SQL联表的方式(逗号, Left Join, Right Join)
2019-03-06
牛客网输入输出举例
2019-03-06
字符串初始化时的注意点
2019-03-06
软考相关试题
2019-03-06
顺序表的操作
2019-03-06
常量表达式
2019-03-06
POD类型
2019-03-06
const与常量,傻傻分不清楚~
2019-03-06
Head First设计模式——迭代器模式
2019-03-06
MongoDB版本及存储引擎区别
2019-03-06
shell echo单行和多行文字定向写入到文件中
2019-03-06
AtCoder Beginner Contest 100 题解
2019-03-06
【数据结构】可持久化线段树初步
2019-03-06
Java高性能编程之CAS与ABA及解决方法
2019-03-06
从BIO到Netty的演变
2019-03-06
《算法导论》第二章笔记
2019-03-06
HTML节点操作
2019-03-06
HTML5新特性
2019-03-06
cmp命令
2019-03-06
一次编辑
2019-03-06