C++作业day6

编程1:

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

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

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

#include <iostream>

using namespace std;

//封装 动物 类  -->基类
class Animal
{
private:
     string name;
     string colour;
     int *age;
public:
     Animal(){}
     Animal(string name,string colour,int age):name(name),colour(colour),age(new int(age))
     {
         cout << "基类::有参构造函数" << endl;
     }
     Animal(const Animal &other):name(other.name),colour(other.colour),age(new int(*other.age))
     {
         cout << "基类::拷贝构造函数" << endl;
     }
     Animal &operator=(const Animal &other)
     {
         if(this != &other)
         {
             name = other.name;
             colour = other.colour;
             age = new int(*other.age);
         }
         cout << "基类::拷贝赋值函数" << endl;
         return *this;
     }
     ~Animal()
     {
         delete age;
         age = nullptr;
         cout << "基类::析构函数"  <<  endl;
     }
};

//封装  狗  类  public 继承 动物 类   --> 派生类
class Dog:public Animal
{
private:
    int *number;  //腿的个数
public:
    Dog() {}
    Dog(string name,string colour,int age,int number):Animal(name,colour,age),number(new int(number))
    {
        cout << "派生类::有参构造函数" << endl;
    }
    Dog(const Dog &other):Animal(other),number(new int(*other.number))
    {
        cout << "派生类::拷贝构造函数" << endl;
    }
    Dog &operator=(const Dog &other)
    {
        if(this != &other)
        {
            Animal::operator=(other);
            number = new int(*other.number);
        }
        cout << "派生类::拷贝赋值函数" << endl;
        return *this;
    }
    void speak()
    {
       cout <<  "汪!汪!汪!" << endl;
    }
    ~Dog()
    {
        delete number;
        number = nullptr;
        cout << "派生类::析构函数"  <<  endl;
    }
};

int main()
{
    Dog d1("旺财","黑色",3,4);
    d1.speak();
    Dog d2 = d1;
    Dog d3;
    d3 = d1;
    return 0;
}

 

编程2:

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

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

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

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

具体过程如下:

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

#include <iostream>

using namespace std;

//封装 讲解员  基类
class Commentator
{
public:
    virtual void perform() = 0;   //纯虚函数
    virtual ~Commentator(){}   //虚解析函数
};

//封装  Lion 派生类
class Lion : public Commentator
{
public:
    void perform()      // 重写 perform 函数
    {
        cout << "狮子正在睡觉" << endl;
    }
};

//封装 Elephant 派生类
class Elephant : public Commentator
{
public:
    void perform()   // 重写 perform 函数
    {
        cout << "大象正在吃香蕉" << endl;
    }
};

//封装 Monkey 派生类
class Monkey : public Commentator
{
public:
    void perform()      // 重写 perform 函数
    {
        cout << "猴子正在爬树" << endl;
    }
};

int main()
{
    Commentator *p1 = new Lion;     //基类的指针指向派生类Lion
    Commentator *p2 = new Elephant; //基类的指针指向派生类Elephant
    Commentator *p3 = new Monkey;   //基类的指针指向派生类Monkey
    p1->perform(); p2->perform(); p3->perform();   //通过父类指针调用基类中的重写函数
    delete  p1;  delete  p2;  delete  p3;
    delete  p1;  delete  p2;   delete  p3;
    return 0;
}

思维导图

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

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

相关文章

nodeJs 学习

常用快捷键 二、fs模块 回调函数为空&#xff0c;则表示写入成功&#xff01; 练习 const fs require(fs); fs.readFile(../files/成绩.txt, utf-8, (err, dataStr) > {if (err) {console.log(读取失败);return err;}console.log(读取成功);const arr dataStr.split( )co…

C++_day6:2024/3/18

作业1&#xff1a;编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在…

一般做策划的的,上哪儿找策划方案借鉴?

许多策划人担忧&#xff0c;借鉴他人的经验和方案会会削弱自己的创新能力和独立思考。 但是&#xff0c;实际上&#xff0c;借鉴他人的经验和方案可以为自己提供更多的灵感和创意&#xff0c;同时也可以提高策划的成功率。 这里推荐策划人必备的宝藏网站&#xff08;专治不会…

Echarts横向柱形图

项目原型图如下: 实际上就是设置两个y轴&#xff0c;第一个显示底色柱子&#xff0c;另一个只显示真实数据的柱子,在这里只显示y轴,x轴不显示.. this.middleLeftOption {tooltip: {trigger: axis,axisPointer: {}},legend: {data: [回退次数],y: bottom},grid: {left: 3%,righ…

微信小程序注册流程

1. 微信小程序注册流程 1.1. 材料 新开通小程序则需要提供未注册过微信、从未绑定过微信公众号的邮箱号&#xff1b;法人的微信号&#xff08;必须已绑定银行卡&#xff09;&#xff1b;法人的身份证号码、身份证正反面照片&#xff1b;管理员手机号和微信绑定的&#xff1b;公…

Docker基本配置及使用

Docker基本配置及使用 使用步骤 1.卸载旧版 代码如下&#xff1a;首先如果系统中已经存在旧的Docker&#xff0c;则先卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engin…

嵌入式DSP教学实验箱操作教程:2-20 数模转换实验(模拟SPI总线输出电压值)

一、实验目的 掌握GPIO模拟SPI总线的使用&#xff0c;了解AD5724的芯片特性和使用&#xff0c;并实现基于AD5724输出电压值。 二、实验原理 StarterWare StarterWare是一个免费的软件开发包&#xff0c;它包含了示例应用程序。StarterWare提供了一套完整的GPIO寄存器配置接…

数据库系统概论-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下数据库系统概论中的练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 数据库系统概论系列文章传送门&#xff1a; 第一章 绪论 第二/三章 关系数据库和标准语言SQL 第四/五章 数据库安全性和完整性…

蓝桥杯之冲刺

文章目录 动态规划01背包小练一下 网格图上的DP 动态规划 01背包 由于不能拆开&#xff0c;那就是DP 问题&#xff0c;如果能拆开&#xff0c;那就是贪心问题 小练一下 import os import sys# 请在此输入您的代码N,V map(int,input().split())w [] v [] w.append(0) v.appen…

数据结构(三)复杂度的深层次剖析

之前发布了数据结构&#xff08;一&#xff09;&#xff0c;很多同学反响不够清晰&#xff0c;那今天就发一篇对复杂度专题的博客&#xff0c;希望对大家理解复杂度提供一些帮助。 时间复杂度 我们先来一个理解一个复杂度&#xff0c;二分查找的复杂度&#xff08;之前写过二…

基于tcp协议的网络通信(基础echo版.多进程版,多线程版,线程池版),telnet命令

目录 基础版 思路 辅助函数 服务端 代码 运行情况 -- telnet ip 端口号 传输的数据为什么没有转换格式 客户端 思路 代码 多进程版 引入 问题 解决 注意点 服务端 代码 运行情况 进程池版(简单介绍) 多线程版 引入 问题解决 注意点 服务端 代码 …

携程Kar98k/hotelUuidKey算法分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析的分析过程,以及一些重要点的记录…

Stable Diffusion + Segment Anything试用

安装 从continue-revolution/sd-webui-segment-anything安装插件分割模型下载后放到这个位置&#xff1a;${sd-webui}/extension/sd-webui-segment-anything/models/sam下&#xff0c;可以下载3个不同大小的模型&#xff0c;从大到小如下&#xff1a;vit_h is 2.56GB, vit_l i…

<JavaEE> 了解网络层协议 -- IP协议

目录 初识IP协议 什么是IP协议&#xff1f; IP协议中的基础概念 IP协议格式 图示 4bit版本号&#xff08;version&#xff09; 4bit头部长度&#xff08;headerlength&#xff09; 8bit服务类型&#xff08;TypeOfService&#xff09; 16bit总长度&#xff08;total l…

【蓝桥杯每日一题】填充颜色超详细解释!!!

为了让蓝桥杯不变成蓝桥悲&#xff0c;我决定在舒适的周日再来一道题。 例&#xff1a; 输入&#xff1a; 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出&#xff1a; 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2 1 1…

AWS监控,AWS 性能监控工具

监控云部署的性能是 IT 环境正常运行的内在条件。AWS 云是一个架构良好的框架&#xff0c;管理员可以使用专用的AWS 性能监控工具增强服务的功能。执行AWS监视是为了跟踪在AWS环境中积极运行的应用程序工作负载和资源。AWS监视器跟踪各种AWS云指标&#xff0c;以帮助提高在其上…

【日常记录】【插件】使用ColorThief,跟随图片变化改变网页背景

文章目录 1、效果图2、ColorThief3、实现4、参考链接 1、效果图 想要实现,界面的背景颜色,跟随图片的 颜色来进行展示, 2、ColorThief 要想实现跟随图片变化实现网页背景渐变效果&#xff0c;则需要获取图片的主要颜色&#xff0c;可以使用ColorThief库来获取图片的颜色 需要注…

JDK1.8超详细安装教程

1、下载jdk1.8 大家可以直接去百度云盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/187N6CU9Gu4bjtOz5_cjd-A?pwd3535 提取码&#xff1a;35352、开始安装 双击下载好的.exe文件&#xff0c;点击下一步 修改安装路径&#xff0c;点击下一步 会顺带安装jre…

Json Web Token(JWT) 快速入门

推荐视频&#xff1a;【从零开始掌握JWT】 目录 第一章 会话跟踪 01 使用Cookie和Session&#xff0c;jsessionid 02 使用token 例子一&#xff1a;自定义token 例子二&#xff1a;使用redis存储token 第一章 会话跟踪 应用背景 &#xff1a;浏览器访问web应用&#xff…

Android 13 源码编译及报错修复

下载AOSP指定分支 repo init -u git://aosp../platform/manifest -b android-13.0.0_r83 同步代码到本地 repo sync -c 初始化编译环境, 选择构建目标 source build/envsetup.sh lunch 选择需要构建的目标&#xff0c;此处以aosp_arm64-eng为例 进行固件编译 make -j12 期间编译…
最新文章