0828|C++day6 菱形继承+虚继承+多态+抽象类+模板

news2025/6/22 17:51:06

一、思维导图

二、今日知识回顾

1)多态

父类的指针或者引用,指向或初始化子类的对象,调用子类对父类重写的函数,进而展开子类的功能。

#include <iostream>
using namespace std;

class Zhou
{
private:
    string name;
    int age;
public:
    //无参构造函数
    Zhou() {}
    //有参构造函数
    Zhou(string n,int a):name(n),age(a)
    {}
    virtual void show()
    {
        cout << "Zhou" << endl;
    }
};

class Teacher:public Zhou
{
private:
    int id;
public:
    //无参构造函数
    Teacher() {}
    //有参构造函数
    Teacher(string n, int a, int id):Zhou(n,a),id(id)
    {}
    void show()
    {
        cout << "上课了" << endl;
    }
};

class Player:public Zhou
{
private:
    string game;
public:
    //无参构造函数
    Player() {}
    //有参构造函数
    Player(string n, int a, string game):Zhou(n,a),game(game)
    {}
    void show()
    {
        cout << "稳住 我们能赢" << endl;
    }

};
int main()
{
    Teacher r("zhangsan",34,1001);
    Zhou *p; //父类的指针
    p = &r;  //父类的指针,指向子类对象 相当于承担老师这个角色
    p->show(); //上课

    Player r1("lisi",23,"王者");
    p = &r1; //此时使游戏玩家这个角色
    p->show();

    return 0;
}

2)虚析构

#include <iostream>

using namespace std;
class Person
{
private:
    string name;
public:
    Person() {}
    Person(string n):name(n)
    {}

    virtual~Person()  //虚析构函数  满足继承
    {
        cout << "Person::析构函数" << endl;
    }
};

class Stu:public Person
{
private:
    int id;
public:
    Stu() {}
    Stu(string n, int a):Person(n),id(a)
    {}

    ~Stu()
    {
        cout << "Stu::析构函数" << endl;
    }
};
int main()
{
    Person *p = new Stu("zhangsan",1001);
    delete p;   //如果没有虚析构函数,进行释放p时,子类自己拓展的空间就没有释放--内存泄漏
    return 0;
}

3)抽象类

  • 抽象类一般是用来被继承的,它不能实例化出具体的一个对象,抽象类中至少有一个纯虚函数。
  • 如果子类没有对父类的纯虚函数重写,那么子类也是抽象类,不能实例化一个对象
#include <iostream>

using namespace std;

class A  //抽象类
{
    int a;
public:
    A() {}
    virtual void show() = 0; //纯虚函数
};
class B:public A
{
    int b;
public:
    B() {}
    void show() //如果子类没有对继承过来的纯虚函数进行重写,那么子类也是抽象类,不能实例化一个对象
    {
    }
};
int main()
{
    B b;
    return 0;
}

三、作业

1)动物园的讲解员和动物表演

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

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

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

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

具体过程如下:

  • 定义一个基类 Animal,其中有一个虚函数 perform(),用于在子类中实现不同的表演行为。
#include <iostream>

using namespace std;

class Animal  //基类
{
    string name;
    int age;
public:
    //无参构造函数
    Animal() {}
    //有参构造函数
    Animal(string n,int a):name(n),age(a)
    {}
    virtual void perform() = 0;  //将perform设置为纯虚类
    virtual~Animal()
    {cout << "Animal::析构函数" << endl;}
};
class Lion:public Animal
{
    string per;
public:
    //无参构造函数
    Lion() {}
    //有参构造函数
    Lion(string n,int a,string p):Animal(n,a),per(p)
    {}
    void perform()
    {
        cout << per << endl;
    }
    ~Lion()
    {cout << "Lion::析构函数" << endl;}
};
int main()
{
    Animal *p = new Lion("狮子",4,"河东狮吼");
    p->perform();
    delete p;

    return 0;
}

 

2)用函数模板实现不同数据类型的交换功能

#include <iostream>

using namespace std;
template  <typename T>
void fun(T &a,T &b)
{
    T temp;
    temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    fun(a,b);
    cout << a << " " << b << endl;

    char c = 'a';
    char d = 'b';
    fun(c,d);
    cout << c << " " << d << endl;

    return 0;
}

 

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

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

相关文章

论文阅读_扩散模型_LDM

英文名称: High-Resolution Image Synthesis with Latent Diffusion Models 中文名称: 使用潜空间扩散模型合成高分辨率图像 地址: https://ieeexplore.ieee.org/document/9878449/ 代码: https://github.com/CompVis/latent-diffusion 作者&#xff1a;Robin Rombach 日期: 20…

Spring补充

一.Spring JDB 配置两个jar包 <!-- spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.2.RELEASE</version> </dependency> <!-- 阿里数据…

Python实现T检验

今天来分享一下T检验的python实现方法。 01 先来上一波概念。 1.单样本t检验&#xff0c;又称单样本均数t检验&#xff0c;适用于来自正态分布的某个样本均数与已知总体均数的比较&#xff0c;其比较目的是检验样本均数所代表的总体均数是否与已知总体均数有差别。已知总体均数…

权限提升-数据库提权-MSF-UDF提权

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的&#xff1f; 后台权限&#xff0c;网站权限&#xff0c;数据库权限&#xff0c;接口权限&#xff0c;系统权限&#xff0c;域控权限等 2、以上常见权限获取方法简要归类说明&#xff1f; 后台权限&#xff1a;SQL注入,数…

PVE 8.0.4 配置记录

前言 七夕收到了媳妇送的礼物 Beelink SER 5 PRO (Ryzen 5700U), 记录打造成私人服务器的过程. 下载安装 Proxmox 8.0.4 https://www.proxmox.com/en/downloads 安装过程中修改磁盘设置: swap 分区设置为物理内存的 2 倍, 防止虚机太多内存不足 root 最大设置为 32 GB, 多了…

SpringCloud入门——微服务调用的方式 RestTemplate的使用 使用nacos的服务名初步(Ribbon负载均衡)

目录 引出微服务之间的调用几种调用方法spring提供的组件 RestTemplate的使用导入依赖生产者模块单个配置的情况多个配置的情况没加.yaml的报错【报错】两个同名配置【细节】 完整代码config配置主启动类controller层 消费者模块进行配置restTemplate配置类controller层 使用na…

云渲染对本地电脑要求高不高?对配置有要求吗?

自己本地电脑渲不动&#xff0c;又没有用过云渲染的朋友们一般都会有这样的疑问&#xff1a;云渲染对电脑要求高不高&#xff1f;需要什么样的配置才能用上云渲染&#xff1f; 其实云渲染对本地电脑的配置是完全没有要求的&#xff0c;相反它还能减轻你本地电脑的运行负担&…

Linux驱动——模块化编程

文章目录 模块化编程方法一方法二前提模块化编程模块化编程基本框架&#xff08;重要&#xff09;模块化编程的编译ubantu上操作开发板的文件系统的指令——make超级终端上的模块指令 多模块情况1情况2 传递参数传递单个参数传递数组 模块化编程 方法一 修改kconfig&#xff…

时间序列数据在工厂运营管理中的作用

工业领域中&#xff0c;数据一直扮演着不可或缺的角色&#xff0c;而时间序列数据则因其独特的特性在工厂运营管理中发挥着极其重要的作用。从揭示趋势到支持实时决策&#xff0c;时间序列数据成为工厂智能化的关键组成部分&#xff0c;以下将对时间序列数据在工厂运营管理中的…

Linux - Docker 安装使用教程

Docker 官方文档地址: Get Started | Docker 中文参考手册: https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are on your contain…

git difftool对比差异,避免推送不相关内容

问题 在利用git进行版本管理的时候&#xff0c;经常会由于对其他不相关的代码&#xff0c;做了一些小改动&#xff0c;例如删除了一个空行&#xff0c;多了一个缩进等。 为避免将这些不相关的改动也提交到远程&#xff0c;对PR造成不必要的影响&#xff0c;可以利用git diff命…

JVM-性能优化工具 MAT

一、MAT下载和安装 1、概述 MAT&#xff08;Memory Analyzer Tool&#xff09;工具是一款功能强大的]ava堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是基于Eclipse开发的&#xff0c;不仅可以单独使用&#xff0c;还可以作为插件的形式嵌入在Eclipse中使用…

对话iPayLinks:在支付赛道,用技术创新发现出海“潮水的流向”

2023是充满变化和机遇的一年。从突飞猛进的Temu、TikTok Shop等新渠道&#xff0c;到“全托管模式”席卷整个跨境电商行业&#xff0c;以及Chat GPT等人工智能大模型的横空出世&#xff0c;都让出海每一环的从业者感受到“潮水流向的变化”。 不久前&#xff0c;7月及上半年进出…

爬虫项目(一):艺术二维码制作

《Python网络爬虫入门到实战》京东购买地址,这里讲解了大量的基础知识和实战,由本人编著: https://item.jd.com/14049708.html配套代码仓库地址:https://github.com/sfvsfv/Crawer艺术二维码制作 到知数云https://data.zhishuyun.com/services ,申请艺术二维码API,可免费…

【广州华锐互动】AR昆虫认知学习系统实现对昆虫形态的捕捉和还原

随着科技的不断发展&#xff0c;人们对自然界的认识也在不断加深。在这个过程中&#xff0c;AR&#xff08;增强现实&#xff09;技术的出现为人们带来了全新的体验方式。为此&#xff0c;广州华锐互动开发了AR昆虫认知学习系统&#xff0c;本文将为大家详细介绍这款系统的特点…

谷歌发布Gemini以5倍速击败GPT-4

在Covid疫情爆发之前&#xff0c;谷歌发布了MEENA模型&#xff0c;短时间内成为世界上最好的大型语言模型。谷歌发布的博客和论文非常可爱&#xff0c;因为它特别与OpenAI进行了比较。 相比于现有的最先进生成模型OpenAI GPT-2&#xff0c;MEENA的模型容量增加了1.7倍&#xf…

Android 中SettingsActivity(PreferenceFragmentCompat)的简单使用

如果你需要一个简单的APP设置&#xff0c;可以使用sharedPreferences进行存储&#xff0c;我们可以借助AndroidStudio快速创建一个用于设置的Activity&#xff0c;其实它是继承PreferenceFragmentCompat&#xff0c;存储方式用的就是sharedPreferences&#xff0c;只是帮我们节…

一文教你如何防御数据库渗透入侵

前言 前段时间博主在做学校内部项目的时候&#xff0c;项目需要暂时上线测试&#xff0c;没想到上线测试几天&#xff0c;MySQL 数据库数据就被恶意删除&#xff0c;但是当时我们没有太当回事&#xff0c;以为只是一次普通黑客攻击&#xff0c;恢复数据之后仍然可以正常使用。…

『 LeetCode题解 』203. 移除链表元素

题目链接 : 『 LeetCode题解 』203. 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/ 目录 &#x1f31f;题目要求&#x1f31f;解题思路&#xff08;动图解析&#xff09;&#x1f9d0;方案一&#x1f601;方案二 &#x1f31f;代码示列 &#x1f31…

海康机器人工业相机SDK MVS安装教程

文章目录 一. 海康机器人介绍二. 工业相机客户端安装教程 一. 海康机器人介绍 海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商&#xff0c;业务聚焦于工业物联网、智慧物流和智能制造&#xff0c;构建开放合作生态&#xff0c;为工业和物流领域用户提供服务…