c++多态总结

2023-05-16

今天来总结一些c++中,有关多态的知识。

     多态: 多态可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
       接下来,我写一个简单地函数来说明多态:
#include<iostream>
using namespace std;

int Add(int left, int right)
{
	return left + right;
}
float Add(float left, float right)
{
	return left + right;
}
int main()
{
	cout<<Add(1,2)<<endl;
	cout<<Add(1.11f,2.22f)<<endl;
	//cout<<Add(1,2.22f)<<endl;
	return 0;
}
            上面的cout<<Add(1,2.22f)<<endl编译是通不过的,应为编译器不知道到底要将传递的参数转化为double类型还是int类型,如果,想要它编译通过,可以屏蔽掉任何一个Add函数。
这里也很容易看出来,系统会根据不同的参数调用不同的Add函数。以上属于静态多态
动态多态
动态绑定:在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。使用virtual关键字修饰类的成员函数时,指明该函数为虚函数,派生类需要重新实现,编译器将实现动态绑定。
例子:
#include<iostream>
using namespace std;
#include <time.h>
#include <Windows.h>


#define random(x) (rand()%x)
class WashRoom
{
public:
	void GotoManWash()
	{
		cout<<"go--left-----man"<<endl;
	}
	void GotoWomanWash()
	{
		cout<<"go--right----woman"<<endl;
	}
};
class Person
{
public:
	virtual void GotoWash(WashRoom& _wash) = 0;
};
class Man:public Person
{
public:
	void GotoWash(WashRoom& _wash)
	{
		_wash.GotoManWash();
	}
};
class Woman:public Person
{
public:
	void GotoWash(WashRoom& _wash)
	{
		_wash.GotoWomanWash();
	}
};
int main()
{
	WashRoom _w;
	for (int idx = 0;idx < 10;idx++)
	{
		Person* _p;
		srand((int)time(0));
		int i = random(10);
		if (i&0x01)
		{
			_p = new Man;
		}
		else
		{
			_p = new Woman;
		}
		_p->GotoWash(_w);
		delete _p;
		_p = NULL;
		Sleep(1000);
	}
}

其中,Person类仅仅提供一个接口。
下面来看一些代码:
class B
{
public:
	virtual void FunTest1()
	{
		cout<<"B::FunTest1()"<<endl;
	}
	void FunTest2()
	{
		cout<<"B::FunTest2()"<<endl;
	}
	virtual void FunTest3()
	{
		cout<<"B::FunTest3()"<<endl;
	}
	virtual void FunTest4()
	{
		cout<<"B::FunTest4()"<<endl;
	}
	virtual void FunTest4(int)
	{
		cout<<"B::FunTest4(int)"<<endl;
	}
};
class D:public B
{
public:
	virtual void FunTest1()
	{
		cout<<"D::FunTest1()"<<endl;
	}
	virtual void FunTest2()
	{
		cout<<"D::FunTest2()"<<endl;
	}
	void FunTest3()
	{
		cout<<"D::FunTest3()"<<endl;
	}
	virtual void FunTest4()
	{
		cout<<"D::FunTest4()"<<endl;
	}
	
};
int main()
{
	B* b;
	D d;
	b = &d;
	b->FunTest1();
	b->FunTest2();
	b->FunTest3();
	b->FunTest4();
	b->FunTest4(1);
	//cout<<sizeof(D)<<endl;
	return 0;
}


主函数中调用的,到底是基类里面的还是派生类里面的呢?
运行结果:
D::FunTest1()
B::FunTest2()
D::FunTest3()
D::FunTest4()
B::FunTest4(int)
从结果可以推断:
基类里面带virtual的函数,在继承类中会被重写(派生类里面的virtual可以省略);
若基类里面不带virtual,派生类里面没有带,则没有被重写,仅仅被继承了写来;
另外,带参数和不带参数也不一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++多态总结 的相关文章

  • 主流 RTOS 评估

    1 RT Thread RT Thread 是国内出产的一款非常优秀的 RTOS 它和 FreeRTOS uCos 等经典 RTOS 最大的不同是 xff1a 它不仅仅是一个实时内核 xff0c 还具备丰富的中间层组件 它提供了一个完整的软
  • Linux mem 2.8 Kfence 详解

    1 原理介绍 Kfence Kernel Electric Fence 是 Linux 内核引入的一种低开销的内存错误检测机制 xff0c 因为是低开销的所以它可以在运行的生产环境中开启 xff0c 同样由于是低开销所以它的功能相比较 KA
  • Linux Phy 驱动解析

    文章目录 1 简介2 phy device2 1 mdio bus2 2 mdio device2 3 mdio driver2 4 poll task2 4 1 自协商配置2 4 2 link 状态读取2 4 3 link 状态通知 3
  • 程序媛工作几年后的感受!体验?

    黑客技术 点击右侧关注 xff0c 了解黑客的世界 xff01 Java开发进阶 点击右侧关注 xff0c 掌握进阶之路 xff01 Python开发 点击右侧关注 xff0c 探讨技术话题 xff01 作者 xff1a hq nuan 来
  • ubuntu 通过 apt-get 安装软件失败时的解决方案

    最近在 vmware上的ubuntu系统下安装 软件时出现安装失败情况 xff0c 在网上搜了一通 xff0c 终于找到了解决方案 遇到的问题和解决方案如下 xff1a 一 apt get install vim二 apt get upda
  • JAVA自学之路 三:要动手

    原创 尚学堂科技 马士兵老师 JAVA自学之路 三 要动手 转载请注明出处 http www bjsxt com zixue zixuezhilu 3 html 无论如何 xff0c 请坚持不懈的动手实验 xff01 学习Java要动手 x
  • Eigen库的安装

    运行命令 xff1a sudo apt get install libeigen3 dev 假设默认安装到 usr local include里 可在终端中输入locate eigen3查看位置 xff0c 若实际中默认安装到了 usr i
  • 搭建自己的简易服务器(公网)

    大部分时候做嵌入式开发的 xff0c 如果是wifi 可以工作在局域网 xff0c 至于物联网设备 xff0c 插手机卡的那种就需要公网ip 测试起来相对比较麻烦 xff0c 电信宽带用户有的可以映射使用 xff0c 但是ip会改变 xff
  • CPP服务器08--http请求响应实现

    http服务设计 对于静态页面服务器来说 xff0c 其工作流程如下 xff1a 接收客户端消息 解析出http请求报文 业务逻辑 xff0c 拼装响应报文 发送给客户端结果 http连接类 设计目标 xff1a 将客户端唯一文件描述符封装
  • Linux C Socket 编程

    以下内容转载自 https www cnblogs com PikapBai p 13964866 html 闪念基因2020 11 20 12 01 20 本文作者 xff1a 她爱喝水 本文链接 xff1a https www cnbl
  • Linux中ROS风格的物理PWM引脚控制,C++代码

    背景 xff1a 拿到一个舵机 xff0c 一个安装了linux和ROS的 小黑盒子 以及一个干干净净啥也不会的脑子 xff0c 然后我从零开始学的 xff0c 总算找到了个能操作舵机的程序 现在只是能跑的状态 xff0c 提供一种思路 x
  • ROS二次开发需要用到的大部分Linux命令

    背景 xff1a 拿到了一架有机载电脑的全部开源的无人机 xff0c 机载电脑安装了ubuntu20 04 xff0c ROS1 xff0c 上面已经在运行了一些程序 我以前只是听过linux xff0c 根本不知道ROS 那么现在需要快速
  • 【技巧】如何为开源社区做贡献

    预计阅读时间 xff1a 6 分钟 Github 这东西怎么用 xff1f 相信有很多人还没有自己操作过 xff0c 这下面给大家推荐一位大佬的文章 xff0c 希望有所帮助 之前有幸参与到一个开源项目中 xff0c 该项目是一个算法知识的
  • MLK | 机器学习采样方法大全

    MLK xff0c 即Machine Learning Knowledge xff0c 本专栏在于对机器学习的重点知识做一次梳理 xff0c 便于日后温习 xff0c 内容主要来自于 百面机器学习 一书 xff0c 结合自己的经验与思考做的
  • python爬虫实战:之爬取京东商城实例教程!(含源代码)

    前言 xff1a 本文主要介绍的是利用python爬取京东商城的方法 xff0c 文中介绍的非常详细 xff0c 下面话不多说了 xff0c 来看看详细的介绍吧 主要工具 scrapyBeautifulSouprequests 分析步骤 1
  • 明面上是个歌手!暗地里是个程序员的明星你只知道许嵩和潘玮柏?

    在5月9日 xff0c 知名演员刘涛在社交平台发文公布 xff1a 已正式入职聚划算成官方优选官了 xff0c 而且还有花名叫刘一刀 xff0c 以后就专职给大家挑好物了 当然 xff0c 刘涛在5 14号已经开始上班了 xff0c 还邀请
  • 如何使用Python实现支付宝在线支付?商家:我人傻了

    windows系统安装Python虚拟环境 首先保证你的系统已经安装好了Python 安装virtualenv C WINDOWS system32 gt pip3 install virtualenv Collecting virtual
  • Mavros Client md5sum Error

    Mavros Client md5sum Error 运行阿木实验室px4 commander包里vio fly sh的 roslaunch px4 command px4 pos estimator launch 时报错 xff1a ER
  • 几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?

    游戏规则 xff1a 1 将 帅 xff1a 不能出田字格 xff0c 不能走斜线 xff0c 只能前进后退向左向右 xff0c 每次只走一格 xff1b 2 士 仕 xff1a 不能出田字格 xff0c 只能走斜线 xff0c 每次只走一
  • 深入理解什么是端口(port)

    每当看到有人的简历上写着熟悉 tcp ip http 等协议时 我就忍不住问问他们 你给我说说 端口是啥吧 可惜 很少有人能说得让人满意 所以这次就来谈谈端口 port 这个熟悉的陌生人 在此过程中 还会谈谈间接层 naming servi

随机推荐

  • 怒爬某破Hub站资源,只为撸这个鉴黄平台

    黄色已经是我们所不容然而却防不胜防的 xff0c 尤其是对于做内容的工具和平台 xff0c 所以花了30分钟搭建了一个鉴黄平台 xff0c 分享给大家 数据准备 找了 N 多资源都不能解决问题 xff0c 于是怒爬某 Bub资料 xff0c
  • 面试官:你简历中写用过docker,能说说容器和镜像的区别吗?

    这篇文章希望能够帮助读者深入理解Docker的命令 xff0c 还有容器 xff08 container xff09 和镜像 xff08 image xff09 之间的区别 xff0c 并深入探讨容器和运行中的容器之间的区别 当我对Dock
  • 用Springboot&WebScoket再造一个类似微信的聊天小程序(附源码)

    基于Springboot和WebScoket写的一个在线聊天小程序 项目说明 此项目为一个聊天的小demo xff0c 采用springboot 43 websocket 43 vue开发 其中有一个接口为添加好友接口 xff0c 添加好友
  • 面试了3000个专科程序员,终于发现了专科跟本科的本质到底差在哪了,与学历无关

    我有个副业 xff08 免费的 xff0c 但是要点缘分 xff0c 毕竟时间不够 xff09 xff0c 刚好在指导一些毕业的程序员找工作 我发现 xff0c 能力差别体现在后天的努力上 xff0c 职业发展的差距形成于认知 同时也整理了
  • 答应我不要再用Xshell了 这个新开源的终端工具酷炫又好用

    我工作中用得最多的工具之一就是 终端连接工具 了 xff0c 因为经常和 Linux 服务器打交道 xff0c 经常在上面跑代码 排查系统问题等等 Windows 系统最常用的就是 Xshell 这款终端工具了 xff0c 但是它只能用于非
  • 刷爆LeetCode 字节技术官亲码算法面试进阶神技太香了

    数据结构与算法 正赶上金三银四 xff0c 说到数据结构与算法这个词 xff0c 肯定有不少人会眉头一皱 也不知从什么时候开始 xff0c 以字节为主的一大波公司面试开始了对算法的连环拷问 如果事前没有系统地刷一波题的话 xff0c 算法这
  • 如果面试官问你CAS,你还这么答,可能就要回去等通知了

    前言 大家好 xff0c 我是JAVA高级开发之路 xff0c 一个总在为粉丝解决面试题的程序员 最近有几个粉丝说在面试面试中遇到了CAS的问题 xff0c 连着几次面试都没有让面试官满意 xff0c 区区CAS底层源码 xff0c 怎能难
  • Python的多线程爬虫详解

    多线程使用流程 Python 提供了两个支持多线程的模块 xff0c 分别是 thread 和 threading 其中 thread 模块偏底层 xff0c 它相比于 threading 模块功能有限 xff0c 因此推荐大家使用 thr
  • MAVROS started. MY ID 1.240, TARGET ID 1.1

    运行Mavros未报错 xff0c 但是启动不成功 xff1a INFO Known MAVLink dialects common ardupilotmega ASLUAV autoquad icarous matrixpilot pap
  • 树莓派和51单片机通信问题解决

    1 关于树莓派的通信 xff0c 网上教程也是很多的 xff0c 我们都知道发的数据是bytes类型的二进制数据 xff0c 到51板接收是需要数据类型转换的然后进行判断 xff0c 如果没有led显示屏会比较麻烦 2 树莓派部分查看这个教
  • OpenMV入门介绍

    目录 一 OpenMV是什么二 OpenART mini与OpenMV对比三 图像处理背景知识1 像素和分辨率2 帧率3 RGB三原色4 LAB颜色空间 四 OpenMV图像处理方法1 感光元件自动增益 白平衡 曝光窗口ROI 2 画图画线
  • Lock和RLock的区别

    lock和rlock都可以用来同步进程或者线程 xff0c 它们之间的区别在于rlock是可重入的 xff0c 也就是一个线程可以获取多次 xff0c 只有在release相同次数时 xff0c rlock才会有locked状态转换为unl
  • 【Gitee】关于远程代码的拉取、修改和重新上传

    一 关于Forked forked的意思是从别人的代码库中复制一份到你自己的代码库 xff0c 与普通的复制不同 xff0c fork包含了原有库中的所有提交记录 xff0c fork后这个代码库是完全独立的 xff0c 属于你自己 xff
  • 基于视频采集卡驱动的错误修改CX26828

    基于视频采集卡驱动的错误修改CX26828 1 设置root密码 command xff1a sudo passwd root 2 查看系统状态 输入命令 xff1a lsmod root 64 ubuntu home yu lsmod i
  • Sqlite远程连接数据

    Sqlite远程连接数据 1 连接本地数据库 QSqlDatabase db 61 QSqlDatabase addDatabase 34 QSQLITE 34 db setDatabaseName 34 personnel db 34 d
  • 基于Tiny210开发板视频显示

    基于Tiny210开发板视频显示 1 写基于V4L2编程 61 61 61 61 61 61 61 61 videodevice h文件 61 61 61 61 61 61 61 61 61 ifndef VIDEODEVICE H def
  • 纯C++去雾算法

    去雾算法 前言 xff1a 经过不断的改进研究 xff0c 该算法终于稳定 xff0c 高效的问世了 xff01 经过研究使该算法适应大雾环境 xff0c 对该算法的内存优化 xff0c 能够实时的高效的运行 一 实时视频 xff1a 二
  • 致院长的一封信

    致院长的一封信 行了一路 xff0c 梦了一路 xff0c 念了一路 xff0c 伤了一路 xff0c 青春的此岸 xff0c 我眉心微蹙 xff0c 聆听清风诉说着经年的过往 xff1b 走了一路 xff0c 赏了一路 xff0c 听了一
  • LINUX字符设备驱动程序实例

    我是通过UBUNTU10 10测试该驱动程序的 xff0c 系统内核为linux 2 6 35 22 可使用uname r 命令来查看当前内核的版本号 下载安装LINUX内核 xff0c 需要下载和本机一样版本的内核源码 1 xff0c 安
  • c++多态总结

    今天来总结一些c 43 43 中 xff0c 有关多态的知识 多态 xff1a 多态可以简单地概括为 一个接口 xff0c 多种方法 xff0c 程序在运行时才决定调用的函数 xff0c 它是面向对象编程领域的核心概念 接下来 xff0c