C++_day6:2024/3/18

作业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:思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

发挥实力,引领游戏行业的未来——武汉灰京文化的成功之路

作为一家游戏发行商&#xff0c;武汉灰京文化的公司实力源于其强大的战略规划和专业团队。自成立以来&#xff0c;公司坚持以用户为中心&#xff0c;不断提升用户体验。通过深入了解玩家需求&#xff0c;武汉灰京文化在游戏运营和推广过程中&#xff0c;精益求精&#xff0c;力…

使用C#的winform控制数据库实例服务的运行状态

一、得到sqlserver的实例名 二、引用对应的程序集和命名空间 using System.ServiceProcess; C#操作服务要用的类 ServiceController 声明类 private ServiceController serviceController new ServiceController("MSSQLSERVER"); 三、判断服务状态 serviceCon…

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 查询合同…

仿懂车帝的二手车交易平台功能介绍

二手车交易平台app是一款功能丰富的二手车交易平台&#xff0c;以下是其主要功能介绍&#xff1a; 二手车信息展示&#xff1a;APP首页展示各类二手车信息&#xff0c;包括车型、品牌、价格等&#xff0c;用户可以轻松浏览并选择自己感兴趣的车辆。搜索与筛选功能&#xff1a;…

AI智能客服系统的费用

实现智能客服所需的费用取决于多个因素&#xff0c;包括项目的规模、所选择的技术和服务提供商、数据的获取和处理方式等。以下是一些可能影响费用的因素&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

微服务day03 -- Docker

1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署&#xff0c;环境不一定一致…

Android中Gradle的生命周期详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 Gradle的生命周期分为三个阶段&#xff1a; 初始化阶段定义阶段(配置阶段)执行阶段 第…

【网络原理】HTTP协议和使用Fiddler抓包

文章目录 &#x1f343;HTTP协议是什么&#xff1f;&#x1f340;理解 "应用层协议"&#x1f38d;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f338;如何抓HTTPS的包&#xff1f; &#x1f38b;抓包工具的原理&#x1…

基于php高校选课系统设计与实现flask-django-python-nodejs

接着&#xff0c;本论文将设计一个基于Web的高校选课系统&#xff0c;并通过详细的需求分析和系统架构设计来解决现有系统中存在的问题。系统的开发将采用目前流行的Web技术和数据库技术&#xff0c;并考虑系统的灵活性、安全性和易用性。最后&#xff0c;本论文将对开发出的系…

jmeter之并发和顺序执行与特殊线程组-第四天

1.jmeter的并发执行 并发执行&#xff1a;多个线程同时执行&#xff0c;不能确定谁先结束 以上案例中http请求里面没有写任何内容&#xff0c;只是为了看这个并发执行的效果 2.jmeter的顺序执行 顺序执行&#xff1a;多个线程顺序执行 再测试计划中勾选“独立运行每个线程组…

【JAVA快速编写UI】 Java 编写一个编码转换和加解密工具,可以创建一个简单的 GUI 应用程序(例子)

EncodingDecodingTool/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── rockmelodies/ │ │ │ └── encodingdecodingtool/ │ │ │ ├── MainApp.java │ │ │ …

shardingsphere-elastic-job-ui 管理界面安装

shardingsphere-elasticjob 从 3.0.0-alpha 版本开始&#xff0c;将console管理界面单独拆分出来 下载前需要 安装 maven 配置环境变量 安装 nodejs 配置环境变量 下载ui源码,安装 官方并未直接提供可执行的二进制文件,需要下载源码编译,目前发行版 3.0.2 https://github.com/…

28-1 文件上传漏洞 - Windows文件流绕过

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Windows文件流绕过::SDATA 定义: 文件流(本地文件系统)::$DATA (Windows文件流绕过):利用NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性。在NTFS文件系统下,每个文件都…

TCP和UDP可以绑定同样的端口吗?

先说答案&#xff0c;可以&#xff0c;TCP和UDP属于传输层的两个不同传输协议&#xff0c;可以说是两个完全独立的模块&#xff0c;因为传输层的端口号的作用&#xff0c;仅仅是为了区分同一台主机上的不同应用程序。其实这个问题就好比两个快递驿站&#xff0c;一个中通一个圆…

氮化镓特性简述

氮化镓 了解和记录一下氮化镓材料的特性。 结构 使用pymatgen和Materials Project中的材料数据绘制能带图。其中mp-804(1.73eV)如下所示&#xff1a; 以及mp-830(1.57eV)如下所示&#xff1a; python代码如下 # from pymatgen.ext.matproj import MPRester from mp_api.…

CCF 编程能力等级认证 C++Python认证标准

CCF 编程能力等级认证 C&Python认证标准 C编程一级标准一、知识点详述二、考核目标三、知识块四、知识点描述五、题型分布 Python 编程一级标准一、知识点详述二、考核目标三、知识块四、知识点描述五、题型分布 C编程二级标准一、知识点详述二、考核目标三、知识块四、知识…

php 页面中下载文件|图片

一、需求 页面中点击下载图片 二、实现 protected function pageLoad(){$filePath $_GET[file];$host $_SERVER[HTTP_HOST];$file http://.$host.$filePath;$fileName basename($filePath);$content file_get_contents($file);ob_clean();$suffixArr explode(., $file…

NSS [SWPUCTF 2022 新生赛]Power!

NSS [SWPUCTF 2022 新生赛]Power! 开题。 随便传一个111&#xff0c;后端进行了一个文件包含操作。 输入index.php&#xff0c;回显了一个不可显示图片。 有点小蒙蔽的&#xff0c;一般这种情况就源码&#xff0c;抓包&#xff0c;扫描。源码里面果然有货。 base解码后是index…

鸿蒙开发入门教程—瀑布流的实战案例

给大家分享一下瀑布流的实战案例&#xff0c;和官方文档略有不同&#xff0c;本文数据直接从api接口获取&#xff0c;更接近实战。需要注意的是&#xff0c;要实现瀑布流&#xff0c;接口最好将图片尺寸一起返回。 本文效果图&#xff1a; 首先要实现IDataSource接口的对象&am…

golang面试题总结

零、go与其他语言 0、什么是面向对象 在了解 Go 语言是不是面向对象&#xff08;简称&#xff1a;OOP&#xff09; 之前&#xff0c;我们必须先知道 OOP 是啥&#xff0c;得先给他 “下定义” 根据 Wikipedia 的定义&#xff0c;我们梳理出 OOP 的几个基本认知&#xff1a; …