C++day6(多态实现动物园的讲解员和动物表演的相关介绍、用函数模板实现不同数据类型的交换功能)

news2024/11/25 16:49:29

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

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

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

具体过程如下:

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

#include <iostream>

using namespace std;

//基类Animal
class Animal
{
private:
    string name;
public:
    //无参构造函数
    Animal()
    {

    }
    //有参构造函数
    Animal(string name):name(name)
    {

    }
    //纯虚函数,用来实现各种动物的不同表演行为
    virtual void perform() = 0;
    //虚析构函数
    virtual ~Animal()
    {
        cout << "Animal::析构函数" << endl;
    }
};

// 子类 Lion,狮子表演
class Lion:public Animal
{
public:
    //无参构造函数
    Lion()
    {

    }
    //有参构造函数
    Lion(string name):Animal(name)
    {

    }
    void perform()
    {
        cout << "狮子表演! " << endl;
    }
    //析构函数
    ~Lion()
    {
        cout << "Lion::析构函数" << endl;
    }
};

// 子类 Elephant,大象表演
class Elephant:public Animal
{
public:
    //无参构造函数
    Elephant()
    {

    }
    //有参构造函数
    Elephant(string name):Animal(name)
    {

    }
    void perform()
    {
        cout << "大象表演!" << endl;
    }
    //析构函数
    ~Elephant()
    {
        cout << "Elephant::析构函数" << endl;
    }
};

// 子类 Monkey,猴子表演
class Monkey:public Animal
{
public:
    //无参构造函数
    Monkey()
    {

    }
    //有参构造函数
    Monkey(string name):Animal(name)
    {

    }
    void perform()
    {
        cout << "猴子表演!" << endl;
    }
    //析构函数
    ~Monkey()
    {
        cout << "Monkey::析构函数" << endl;
    }
};

int main()
{
        Animal *p = new Lion("lion表演");
        p->perform();
        delete p;

        Animal *p1 = new Elephant("elephant表演");
        p1->perform();
        delete p1;

        Animal *p2 = new Monkey("monkey表演");
        p2->perform();
        delete p2;


    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, b = 20;
    fun(a,b);
    cout << a << " " << b << endl;

    double c = 1.3,d = 1.4;
    fun(c,d);
    cout << c << " " << d << endl;

    return 0;
}

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

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

相关文章

git clone 报SSL证书问题

git命令下运行 git config --global http.sslVerify false 然后再进行重新clone代码

06.DenseCap

目录 前言泛读摘要IntroductionRelated Work小结 精读模型模型构架全卷积定位层卷积锚点边界回归边界采样双线性插值 识别网络RNN 损失函数训练与优化 实验数据集&#xff0c;预处理DenseCap评价标准基线区域和图像级统计之间的差异RPN vs EdgeBoxesQualitative results 区域ca…

美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?

周末的时候,有一位小伙伴提了一些关于 ConcurrentHashMap 的问题,都是他最近面试遇到的。原提问如下(星球原贴地址:https://t.zsxq.com/11jcuezQs ): 整个提问看着非常复杂,其实归纳来说就是两个问题: ConcurrentHashMap 为什么 key 和 value 不能为 null?ConcurrentH…

NFTScan | 08.21~08.27 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。周期&#xff1a;2023.08.21~ 2023.08.27 NFT Hot News 01/ NFT 品牌体验平台 Recur 将于 11 月 16 日彻底关闭&#xff0c;此前曾获 5000 万美元融资 8 月 21 日&#xff0c;NFT 品牌体验平台 Recur 在 X…

MySQL数据库学习【基础篇】

&#x1f4c3;基础篇 下方链接使用科学上网速度可能会更加快一点哦&#xff01; 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的…

【业务功能篇86】微服务-springcloud-系统性能压力测试-jmeter-性能优化-JVM参数调优

系统性能压力测试 一、压力测试 压力测试是给软件不断加压&#xff0c;强制其在极限的情况下运行&#xff0c;观察它可以运行到何种程度&#xff0c;从而发现性能缺陷&#xff0c;是通过搭建与实际环境相似的测试环境&#xff0c;通过测试程序在同一时间内或某一段时间内&…

2023高教社杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

Unity关键概念

Unity是一款跨平台的游戏引擎和开发工具&#xff0c;用于创建2D和3D游戏、交互式内容和应用程序。它提供了一个强大的开发环境&#xff0c;使开发者能够轻松地设计、开发和部署高质量的游戏和应用程序。 以下是Unity的几个关键概念&#xff1a; 游戏对象&#xff08;Game Obj…

公文大师:如何写出高效、准确与有说服力的官方文件

在当今的工作环境中&#xff0c;公文的重要性不言而喻。它们是组织、政府和企业之间沟通的桥梁&#xff0c;是决策的基石。但是&#xff0c;你是否曾为如何写好一篇公文而感到困惑&#xff1f;是否曾被复杂的官方术语或格式所困扰&#xff1f;如果你的答案是肯定的&#xff0c;…

Unity创建一个可移动的2D角色

文章目录 创建角色与场景创建地面 角色控制脚本检测地面 运行结果 创建角色与场景 我们首先创建一个角色&#xff0c;这里我新建了一个胶囊体用来当Player&#xff0c;一个Square用来当地面。 接下来&#xff0c;为角色增加碰撞体和刚体&#xff0c;为地面增加碰撞体。然后我…

vue数字输入框

目录 1.emitter.JS function broadcast (componentName, eventName, params) {this.$children.forEach(child => {var name = child.$options.componentNameif (name === componentName) {child.$emit.apply(child, [eventName].concat(params))} else {broadcast.apply(c…

leetcode 503. 下一个更大元素 II

2023.8.28 本题类似于下一个更大元素I &#xff0c;区别就是数组变成循环的了&#xff0c;可以将nums数组先double一下&#xff0c;如&#xff1a;{1&#xff0c;2&#xff0c;1}变成{1&#xff0c;2&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;1}&#xff0c;再用单调…

Spring -学习笔记

文章目录 1. Spring介绍1.1 Spring的体系结构 2.DI/Ioc&#xff08;依赖注入/控制反转&#xff09;2.1 依赖及注解说明1. lombok2. spring-context 2.2 Bean和Spring 上下文的配置方式方式1&#xff1a;基于xml文件的配置方法2&#xff1a; 基于java注解配置bean方法3&#xff…

建筑行业,隐藏这招你不知道的技法!

智慧工地作为现代建筑领域的一项创新概念&#xff0c;通过融合先进的信息技术和物联网技术&#xff0c;为传统的建筑工地带来了全新的变革和优化。 智慧工地为建筑行业注入了数字化和智能化的元素&#xff0c;不仅提升了施工效率和管理水平&#xff0c;还在安全监控、资源利用、…

(LaTeX)换行、换页、断字、字样、字号

通常 LaTeX 会自动换行、换页。用户也可以用 \\ 或 \newline 来强制换行&#xff1b; 用 \newpage 来强制换页。一般情况下 LATEX 会尽量均匀地断字&#xff08;Hyphenate&#xff09;&#xff0c;使得每一行的字间距分布整齐。 但有时我们也需要显式指明断字位置&#xff0c…

【计算机基础】一文搞清楚什么是线程/进程/协程

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

AI智能问答最具体的介绍在这里!

AI智能问答是一种基于人工智能技术的问答系统&#xff0c;它可以通过分析和理解用户提出的问题&#xff0c;然后从大量的知识库、文档或数据中提取相关信息&#xff0c;来生成一个准确的答案。以下是AI智能问答的一些具体介绍&#xff0c;希望可以帮助到大家更了解AI智能问答。…

骨传导耳机对骨头好不好?骨传导耳机对耳朵有影响吗

骨传导耳机是通过将声音以振动的形式传递到颅骨&#xff0c;再由内耳感知而不需要通过传统的声音传导路径&#xff08;即耳道和鼓膜&#xff09;。由于不直接接触耳朵或耳道&#xff0c;骨传导耳机在一定程度上减少了对耳部的压力和刺激&#xff0c;因此对骨头相比传统耳机来说…

leetcode875. 爱吃香蕉的珂珂(java)

二分查找 爱吃香蕉的珂珂二分查找 上期经典 爱吃香蕉的珂珂 难度 - 中等 LC - 875.爱吃香蕉的珂珂 珂珂喜欢吃香蕉。这里有 n 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了&#xff0c;将在 h 小时后回来。 珂珂可以决定她吃香蕉的速度 k &#xff08;单位&…

automake安装及使用

安装 sudo apt install automake实例 源文件 以一个简单的例子为例&#xff1a; add .c #include "add.h"int add(int a, int b){return a b; }add.h int add(int a, int b);main.c #include <stdio.h> #include "add.h"int main() {int a …