C++_day6:2024/3/18

news2025/2/25 15:38:47

作业1:编程题:

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

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

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

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

具体过程如下: 

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

代码:

#include <iostream>

using namespace std;

//封装一个 动物 的基类
class Animal
{
private:
    string type;    //动物种类
    string color;   //动物颜色
public:
    //无参构造函数
    Animal() {}
    //有参构造函数
    Animal(string type, string color):type(type), color(color)
    {
        cout << "Animal::有参构造函数" << endl;
    }
    //表演行为
    virtual void perform()
    {
        cout << "杂技表演" << endl;
    }
    //虚析构函数:正确引导子类释放自己的空间
    virtual ~Animal()
    {
        cout << "Animal::析构函数" << endl;
    }
};

class Dog:public Animal
{
private:
    string name;    //狗的名字
    int age;        //狗的年龄
public:
    //无参构造函数
    Dog() {}
    //有参构造函数
    Dog(string type, string color, string name, int age):Animal(type, color), name(name), age(age)
    {
        cout << "Dog::有参构造函数" << endl;
    }
    //表演行为
    void perform()
    {
        cout << " Dog::摇尾巴 " << endl;
    }
    //析构函数
    ~Dog()
    {
        cout << "Dog::析构函数" << endl;
    }
};
//封装一个 猫 这样的类   公有继承 动物 这个基类
class Cat:public Animal
{
private:
    string name;    //猫的名字
    int age;        //猫的年龄
public:
    //无参构造函数
    Cat() {}
    //有参构造函数
    Cat(string type, string color, string name, int age):Animal(type, color), name(name), age(age)
    {
        cout << "Cat::有参构造函数" << endl;
    }
    //表演行为
    void perform()
    {
        cout << " Cat::抓老鼠 " << endl;
    }
    //析构函数
    ~Cat()
    {
        cout << "Cat::析构函数" << endl;
    }
};

int main()
{
    //用狗这样的类实例化一个 d1 对象,并自动调用构造函数初始化
    Dog d1("狗", "黄色", "大黄", 5);

    //定义一个父类的指针,指向子类
    Animal *p = &d1;
    cout << "--------狗的行为--------" << endl;
    p->perform();
    cout << "-----------------------" << endl;
    //用猫这样的类实例化一个 c1 对象,并自动调用构造函数初始化
    Cat c1("猫", "白色", "大白", 5);
    p = &c1;
    cout << "--------猫的行为--------" << endl;
    p->perform();
    cout << "-----------------------" << endl;
    return 0;
}

效果图:

作业2:试编程:

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

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

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

eg : Dog d1;

Dog d2(.....);

Dog d3(d2);

d1 = d3;

代码:

#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:
    //无参构造函数
    Dog()
    {}
    //有参构造函数
    Dog(int count, string name, string color, int age):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;
    }
    //行为函数
    void speak()
    {
        cout << "汪汪汪" << endl;
    }
};

int main()
{
    //用狗这样的类实例化一个对象
    Dog d1;                         //自动调用无参构造函数
    Dog d2(4,"小黑", "黑", 5);       //自动调用有参构造函数
    d2.speak();

    Dog d3(d2);                     //自动调用拷贝构造函数
    d1 = d3;                        //自动调用拷贝赋值函数
    return 0;
}

效果图:

作业3:思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文读懂Partisia区块链的MOCCA 方案:让资产管理可信且可编程

在今年 1 月&#xff0c;Partisia Blockchain 在参加了达沃斯世界经济论坛时&#xff0c;宣布推出一种全新的链上资产管理方案 MOCCA &#xff08;MPC On-Chain Custody Advanced&#xff09;&#xff0c;即多方计算链上托管高级解决方案。据悉该方案建立在 Partisia Blockchai…

腾讯云服务器多少钱一年?2024报价曝光,请查收

腾讯云服务器多少钱一年&#xff1f;61元一年起。2024年最新腾讯云服务器优惠价格表&#xff0c;腾讯云轻量2核2G3M服务器61元一年、2核2G4M服务器99元一年可买三年、2核4G5M服务器165元一年、3年756元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、312元一年、8核…

海外代理IP在跨境电商中的五大应用场景

在我国跨境电商的发展中&#xff0c;海外代理IP的应用日益广泛&#xff0c;它不仅帮助商家成功打入国际市场&#xff0c;还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

【必撸】:白嫖Okapi x B²测试网声誉NFT,一鱼双吃保姆级教程

这期教程写起来是真的麻烦&#xff0c;如果有帮助还请用发财的手点个赞&#xff0c;谢谢 简介&#xff1a;BTC L2头号种子选手B Network热度很高就不过多介绍了&#xff0c;这里主要说一下Okapi。Okapi 是Web3链上验证的内容、声誉认证平台&#xff0c;它提供一个值得信赖的平…

Mysql数据库概念与安装

目录 一、数据库概述 1、数据库的基本概念 2、数据库管理系统&#xff08;DBMS&#xff09; 2.1 数据库管理系统概念 2.2 数据库管理系统工作模式 3、数据库系统&#xff08;DBS&#xff09; 3.1 数据库系统概念 3.2 数据库系统发展史 4、关系型数据库与非关系型数据库…

鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Ellipse)

椭圆绘制组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Ellipse(options?: {width?: string | number, height?: string | number}) 从API version 9开始&#xff0…

ReoGrid电子表格组件

ReoGrid电子表格组件 ReoGrid 是一个基于 .NET 的电子表格组件&#xff0c;供开发人员使用。它允许用户将电子表格功能嵌入到其 .NET 应用程序中。ReoGrid 提供类似于流行的电子表格软件&#xff08;如 Microsoft Excel&#xff09;的功能&#xff0c;包括以编程方式创建、编辑…

Linux字符设备与I2C驱动结合使用

引言 在Linux操作系统中&#xff0c;设备驱动程序充当硬件和软件之间的桥梁。字符设备驱动是一种特殊类型的驱动&#xff0c;它允许用户以字节流的形式访问硬件设备。这些设备包括键盘、鼠标、串口等。在本博客中&#xff0c;我们将探讨Linux字符设备驱动的基础知识&#xff0…

u-boot-2017.09 make配置过程分析

概述 本文基于firefly RK3588Q SDK uboot配置过程进行分析&#xff0c;环境如下&#xff1a; 编译环境&#xff1a;Ubuntu 20.04 LTS 编译工具&#xff1a;aarch64-linux-gnu- 代码版本&#xff1a;u-boot v2017.09 配置文件&#xff1a;rk3588_defconfig Uboot配置单板 …

【数组、字符串】算法例题

每个题的【方法1】是自己的思路&#xff0c;【其他方法】是力扣上更优的解题思路 目录 一、数组、字符串 1. 合并两个有序数组 ① 2. 移除元素 ① 3. 删除有序数组中的重复项 ① 4. 删除有序数组中的重复项 II ② 5. 多数元素 ① 6. 轮转数组 ② 7. 买卖股票的最佳时机…

瑞_Redis_短信登录

文章目录 项目介绍1 短信登录1.1 项目准备1.1.1 导入SQL1.1.2 导入后端项目1.1.3 导入前端项目 1.2 基于Session实现登录流程1.2.1 功能流程介绍1.2.1.1 发送短信验证码1.2.1.2 短信验证码登录、注册1.2.1.3 校验登录状态 1.2.2 实现发送短信验证码功能1.2.2.1 页面流程1.2.2.2…

2024单商户微信小程序商城源码

2024单商户微信小程序商城源码 1.框架采用全新thinkphp6事件开发设计layuiuniapp进行设计&#xff0c;代码完全重构&#xff0c;支持百万级! 2.前端以layui uniapp模块化开发; 3.数据导出采用phpExce1,使数据更加直观&#xff0c;更方便于管理统计; 4.插件钩子机制&#xff0…

突发!半导体巨头关闭上海公司,重组中国区业务!

据韩媒消息&#xff0c;韩国最大的半导体巨头之一 SK 海力士正在重组中国区业务&#xff0c;计划关闭其在上海的子公司&#xff0c;该子公司成立于 2006 年。 根据发布的 2023 年审计报告&#xff0c;去年四季度以来该公司一直在清算其上海子公司&#xff0c;并计划将业务重心…

基于java的宠物信息交流平台设计(含源文件)

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的“多鱼”旧物交易平台。当前的信息管理存在工作…

【第十二章】改进神经网络学习方式-过拟合与正则化

前言 诺贝尔奖获得者、物理学家恩里科费米曾被问及对一位同事提出的数学模型作为重要未解物理问题的解决方案的看法。该模型与实验结果非常吻合&#xff0c;但费米持怀疑态度。他询问该模型中有多少自由参数可供设置。答案是“四个”。费米回答道:“我记得我的朋友约翰尼冯诺伊…

基于Spring Boot+Vue的智慧图书管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 一、项目简介 如今社会上各行各业&…

力扣---验证二叉搜索树---前根/中根/后根遍历

题目解析参考&#xff1a;验证二叉搜索树_哔哩哔哩_bilibili 一开始做呢&#xff0c;就跟这位老兄一样&#xff1a; 因为没有考虑到5和3的比较 接下来走入整体&#xff1a; 先根遍历解法&#xff1a; 首先 每个点其实都有范围&#xff0c;比如根节点的范围在(-INF,INF)&…

Vue.js+SpringBoot开发企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

线性代数基础概念和在AI中的应用

基本概念 线性代数是数学的一个分支&#xff0c;专注于向量、向量空间&#xff08;也称为线性空间&#xff09;、线性变换和矩阵的研究。这些概念在数据科学、人工智能、工程学和物理学等多个领域都有广泛应用。以下是这些基本概念的详细解释和它们在数据处理和AI中的应用。 …

Java语言: JVM

1.1 内存管理 1.1.1 JVM内存区域 编号 名字 功能 备注 1 堆 主要用于存放新创建的对象 (所有对象都在这里分配内存) jdk1.8之后永久代被替换成为了元空间&#xff08;Metaspace&#xff09; 2 方法区(加、常、静、即) 被虚拟机加载的类信息(版本、字段、方法、接口…