C++_day6:继承、多态

1.封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪

再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数(整型 int count),共有成员函数:会叫:void speak()

要求:分别完成基类和派生类中的:构造函数、析构函数、拷贝构造函数、拷贝赋值函数

程序代码:

#include <iostream>using namespace std;
//封装一个动物的基类
class Animal
{
private:string name;//名字string color;//颜色int *age;//年龄(指针)
public://无参构造函数Animal(){}//有参构造函数Animal(string name,string color,int age):name(name),color(color),age(new int(age)){cout << "父类::有参构造函数" << endl;}//拷贝构造函数Animal(const Animal &other):name(other.name),color(other.color),age(new int(*other.age)){cout << "父类::拷贝构造函数" << endl;}//拷贝赋值函数Animal &operator=(const Animal &other){if( this != &other ){name = other.name;color = other.color;age = new int(*other.age);}cout << "父类::拷贝赋值函数" << endl;return *this;}//析构函数~Animal(){delete age;age=nullptr;cout << "父类::析构函数" << endl;}
};
//封装一个狗 类 共有继承 动物类
class Dog:public Animal
{
private:int *count;//狗腿个数 (指针)
public:void speak(){cout << "汪汪汪" << endl;}//无参构造函数Dog(){cout << "子类::无参构造函数" << endl;}//有参构造函数Dog(string name,string color,int age,int count):Animal(name,color,age),count(new int(count)){cout << "子类::有参构造函数" << endl;}//拷贝构造函数Dog(const Dog &other):Animal(other),count(new int(*other.count)){cout << "子类::拷贝构造函数" << endl;}//拷贝赋值函数Dog &operator=(const Dog &other){if( this != &other ){Animal::operator=(other);//父类的拷贝赋值函数count = new int(*other.count);}cout << "子类::拷贝赋值函数" << endl;return *this;}//析构函数~Dog(){delete  count;count = nullptr;cout << "子类::析构函数" << endl;}
};int main()
{//狗类实例化 对象Dog d1;//无参构造函数Dog d2("金毛","黄",4,4);//有参构造函数d2.speak();Dog d3(d2);//拷贝构造函数d1=d3;//拷贝赋值函数return 0;
}

运行结果:

2.以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:

比喻:动物园的讲解员和动物表演

想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。

在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。

具体过程如下:

定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。

程序代码:

#include <iostream>using namespace std;
//封装 动物 类
class Animal
{
private:string name;//名字int age;//年龄
public://无参构造函数Animal(){}//有参构造函数Animal(string name,int age):name(name),age(age){cout << "Animal::有参构造函数" << endl;}//虚表演函数virtual void perform()=0;//虚析构函数virtual ~Animal(){cout << "Animal::析构函数" << endl;}void show(){cout << "age = " << age << endl;}
};
//封装 虎子 类
class Tiger:public Animal
{
private:string color;//颜色
public://无参构造函数Tiger(){}//有参构造函数Tiger(string name,int age,string color):Animal(name,age),color(color){cout << "Tiger::有参构造函数" << endl;}//表演行为void perform(){cout << "Tiger::钻火圈" << endl;}//析构函数~Tiger(){cout << "Tiger::析构函数" << endl;}
};
//封装 猴 类 共有继承 动物类
class Monkey:public Animal
{
private:string color;//颜色
public://无参构造函数Monkey(){}//有参构造函数Monkey(string name,int age,string color):Animal(name,age),color(color){cout << "Monkey::有参构造函数" << endl;}//表演行为void perform(){cout << "Monkey::套圈" << endl;}//析构函数~Monkey(){cout << "Monkey::析构函数" << endl;}
};
int main()
{//用虎子实例化一个 t1Tiger t1("虎子",5,"黄");//父类指针Animal *p = &t1;cout << "虎子表演" << endl;p->perform();//用猴子实例化一个m1Monkey m1("猴子",5,"灰");p=&m1;cout << "猴子表演" << endl;p->perform();return 0;
}

运行结果:

流程图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/548928.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java基础】IO流(三):字符流的FileReader(文件字符输入流)和 FileWriter(文件字节输出流)

目录 字符流 1、FileReader&#xff08;字符输入流&#xff09; 1.1、无参的read( )方法示例 ​编辑 1.2、有参的read(char[ ] buffer)方法示例 2、FileWriter&#xff08;字符输出流&#xff09; 字符流 字符流的底层其实就是字节流&#xff0c;即字符流 字节流 字符集…

【数据挖掘】练习2:数据管理2

课后作业2&#xff1a;数据管理2 一&#xff1a;上机实验2 # 编写函数stat&#xff0c;要求该函数同时计算均值&#xff0c;最大值&#xff0c;最小值&#xff0c;标准差&#xff0c;峰度和偏度。 install.packages("timeDate") library(timeDate) stat <- func…

Unity引擎是否被过度吹嘘?

提到Unity&#xff0c;人们基本上持有以下几种观点&#xff1a; A. 很多人十分欣赏Unity在跨平台兼容性和大规模开放世界场景方面的出色表现。其渲染、环境特效以及AI系统为设计多样化沙盒游戏提供了强大支持。这使得Unity非常适合开发具有多种游戏玩法和互动系统的作品。 B. 一…

el-form 的表单校验,如何验证某一项或者多项;validateField 的使用

通常对form表单的校验都是整体校验&#xff1a; this.$refs.form.validate( valid > {if (valid) {// 校验通过&#xff0c;业务逻辑代码...} }); 如果需要对表单里的特定一项或几项进行校验&#xff0c;应该如何实现&#xff1f; 业务场景&#xff1a;下图点探测按钮时…

Machine Learning ---- Feature Scaling

目录 一、What is feature scaling:&#xff1a; 二、Why do we need to perform feature scaling? 三、How to perform feature scaling: 1、Normalization: 2、Mean normalization: 3、Standardization (data needs to follow a normal distribution): 一、What is featur…

Java——网络编程

网络编程基础类 InetAddress类 java.net.InetAddress类用来封装计算机的IP地址和DNS(没有端口信息),它包括一个主机名和一个ip地址,是java对IP地址的高层表示。大多数其他网络类都要用到这个类&#xff0c;包括Sorket、ServerSocker、URL、DatagramSorket、DatagramPacket等常…

LIGHTHOUSE Apex RBP应用案例|汽车涂装行业 电动汽车电池制造行业的颗粒物监测首选

Lighthouse ApexBP汽车制造中的颗粒物监测技术无疑是汽车制造领域的一项革命性发展。它不仅提供了全面、高精度的颗粒检测&#xff0c;而且能够轻松集成到现有的制造流程中&#xff0c;满足自动化需求&#xff0c;加强质量控制&#xff0c;确保电动汽车电池生产的安全性和效率。…

在Latex中优雅的插入svg图片(Ubuntu22.04)

文章目录 一、前言二、准备工作三、脚本编程四、结论 一、前言 在 LaTeX \LaTeX LATE​X 中&#xff0c;插入图片常用的为 figure 环境加 \includegraphics 命令&#xff1a; \begin{figure}[!htbp]\centering\includegraphics[width\textwidth]{图片名.jpg/jpeg/png/pdf}\c…

【LeetCode热题100】104. 二叉树的最大深度(二叉树)

一.题目要求 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&am…

【文本挖掘与文本分析】上机实验二

实验目的和要求 了解ROSTContentMining5.8可视化标签云的基本操作&#xff1b;采集某部小说进行分词与词频分析基于某背景图制作词云 或采集二十大报告进行分词与词频分析&#xff1b;基于某背景图制作二十大报告的词云&#xff1b; 数据来源 《射雕英雄传》或《鬼吹灯之精绝…

Java后端面试:框架篇高频面试(Spring、SpringMVC、SpringBoot、MyBatis)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Java后端面试&#xff1a;MySQL面试篇&#xff08;底层事务、SQL调优&#xff09; &#x1f4da;订阅专栏&#xff1a;Java后端面…

数字化转型导师坚鹏:人工智能在金融机构数字化转型中的应用

人工智能在金融机构数字化转型中的应用 课程背景&#xff1a; 金融机构数字化转型离不开人工智能&#xff0c;在金融机构数字化转型中&#xff0c;人工智能起到至关重要的作用&#xff0c;很多机构存在以下问题&#xff1a; 不清楚人工智能产业对我们有什么影响&#xff1f;…