C++多态性

C++基础:什么是C++的多态性 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性)而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者 阅读详情

· 多态性指发出同样的消息被不同类型的对象接收时导致完全不同的行为。

· 多态的实现:

①函数重载、②运算符重载-->静态(编译时的多态)

虚函数-->动态:运行时的多态


运算符重载

· 运算符重载是对已有的运算符赋予多重含义

· 规则限制:①可以重载除  .   .*   ::   ?:  外的所有运算符。②不改变原运算符的优先级和结合性

③不改变操作数个数

· 两种形式:①重载为类成员函数。②重载为友元函数。

举例:

#include<iostream.h>
class complex	//复数类声明
{
public:		//外部接口
	complex(double r=0.0,double i=0.0){real=r;imag=i;}//构造函数
	complex operator + (complex c2);//+重载为成员函数
	complex operator - (complex c2);//-重载为成员函数
	void display();		//输出复数
private:
	double real;	//实部
	double imag;	//虚部
};
complex complex::operator+(complex c0)//重载函数实现
{
	complex c;
	c.real=c0.real+real;
	c.imag=c0.imag+imag;
	return complex(c.real,c.imag);
}
complex complex::operator-(complex c0)//重载函数实现
{
	complex c;
	c.real=real-c0.real;
	c.imag=imag-c0.imag;
	return complex(c.real,c.imag);
}
void complex::display()
{
	cout<<"("<<real<<","<<imag<<")"<<endl;
}
void main()
{
	complex c1(5,4),c2(2,10),c3;
	cout<<"c1=";c1.display();
	cout<<"c2=";c2.display();
	c3=c1-c2;		//使用重载运算符完成复数减法
	cout<<"c3=c1-c2=";
	c3.display();
	c3=c1+c2;		//使用重载运算符完成复数加法
	cout<<"c3=c1+c2=";
	c3.display();
}

前置单目运算符

如++a,重载后,a.operator++().

后置单目运算符

如a++,重载后,a.operator++(0)

举例:重载运算符走秒

#include<iostream.h>
class Clock		//时钟类
{
	int Hour,Minute,Second;
public:
	Clock(int NewH,int NewM,int NewS);//构造函数
	void ShowTime();	//时间显示
	void operator++();//前置单目运算符重载
	void operator++(int);//后置单目运算符重载
};
Clock::Clock(int NewH=0,int NewM=0,int NewS=0)
{
	Hour=NewH;
	Minute=NewM;
	Second=NewS;
}
void Clock::operator++()//前置重载
{
	Second++;
	if(Second>=60)
	{
		Second=Second-60;
		Minute++;
		if(Minute>=60)
		{
			Minute=Minute-60;
			Hour++;
			Hour=Hour%24;
		}
	}
	cout<<"++Clock:";
}
void Clock::operator++(int)//后置重载
{
	Second++;
	if(Second>=60)
	{
		Second=Second-60;
		Minute++;
		if(Minute>=60)
		{
			Minute=Minute-60;
			Hour++;
			Hour=Hour%24;
		}
	}
	cout<<"Clock++:";
}
void Clock::ShowTime()
{
	cout<<"Now time is:"<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
void main()
{
	Clock myClock(23,59,59);
	cout<<"First time output:"<<endl;
	myClock.ShowTime();
	myClock++;
	myClock.ShowTime();
	++myClock;
	myClock.ShowTime();
}

运算符友元函数设计

· 双目运算符B重载后,,表达式oprd1 B oprd2等同于operator B(oprd1,oprd2)

· 前置单目运算符B重载后,表达式 B oprd 等同于 operator B(oprd)

· 后置单目运算符B重载后,表达式 B oprd 等同于 operator B(oprd,0)

例:友元函数操作符重载实现复数运算。

#include<iostream.h>
class complex	//复数类声明
{
	double real;
	double imag;
public:
	complex(double r=0.0,double i=0.0)//构造函数
	{real=r;imag=i;}
	friend complex operator+(complex c1,complex c2);//友元函数,运算符+重载
	friend complex operator-(complex c1,complex c2);//友元函数,运算符-重载
	void display();			//显示复数值
}
complex operator+(complex c1,complex c2)
{return complex(c2.real+c1.real,c2.imag+c1.imag)}
complex operator-(complex c1,complex c2)
{return complex(c1.real+c2.real,c1.imag+c2.imag)}
……


虚函数

参见C++继承与派生

浅谈C++多态性 C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。   C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函... 阅读详情

相关推荐

[C++多态性 cpp] -- 让你的代码更加灵活多变

多态性是面向对象编程中的一个重要概念,它允许一个基类指针能够指向派生类的对象,并且能够调用该派生类中的成员函数,从而实现对对象的多种操作。静态多态性是通过函数重载和运算符重载来实现的,而动态多态性则是通过虚函数来实现的。当基类指针指向一个派生类对象时,如果该派生类中有与基类中的虚函数同名的函数,那么就会调用该派生类中的函数,而不是基类中的函数。通过对虚函数的重写,可以让基类指针指向派生类的对象,并且能够调用该派生类中的成员函数,从而实现对对象的多种操作。在C++中,多态性是通过虚函数来实现的。

持续更新 118

C++ 面向对象- -一些简单练习(一)

这里边是我自己在下边学的时候练习的一些代码,有的简单,有的比较实用,我在前面建个目录,大家有想看的就直接根据目录找吧,直接放代码了。 目录 1、结构体与类 2、类的简单使用 3、变量间的引用 4、析构函数的使用 5、有默认参数的构造函数 6、转换构造函数-实复数相加 7、流提取运算符的重载 8、实复数的加减-运算符的重载 9、复数相加-无运算符重载 10、重载输出流运算符 ...

徐小mu的博客 374

【经典C语言程序100例之十八 cpp】—— C++中的多态性

在主函数中,首先创建了Rectangle和Triangle对象,然后定义了一个指向Shape类的指针shape,并分别让它指向Rectangle和Triangle对象。最后,分别通过shape->area()调用他们的area函数,输出不同的结果。上述程序中,首先定义了一个父类Shape,它有两个数据成员width和height,以及一个虚函数area。如果在父类中调用该虚函数,那么将会根据实际对象类型的不同而有不同的结果。通过使用虚函数,我们可以根据对象的实际类型来调用不同版本的函数,从而实现多态性。

CodeWhizZ的博客 157

C++之多态性

1.初探多态性 在面向对象方法中,所谓多态性就是不同对象收到相同消息,产生不同的行为。在C++程序设计中,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,这样就可以用同一个函数名调用不同内容的函数。换言之,可以用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。 事实上,在程序设计中经常会使用到多态性。最简单的例子就是运算符了,例如我们使用运算符+,就可以实现整型数...

studyhardi的博客 5万+

【Godot】实现对话系统

在 Godot 中实现对话系统(Dialogue System)是游戏开发中的常见需求。Godot本身自带的的灵活性和轻量级脚本语言 GDScript 使得实现对话系统变得相对简单。以下是实现一个基础对话系统的示例。(语言为GDScript但高亮选择Python因为类似)通过 Godot 和 GDScript,我们可以给我们的游戏实现一个对话系统。从简单的文本显示到复杂的分支对话,Godot 提供了足够的灵活性来满足我们的需求。如果需要更高级的功能,可以尝试使用现成的插件如 Dialogic。

Octopus2077的博客 2522

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 235

C++多态性思考

前沿 今天看android的服务源码时候,看见了一个C++的多态性问题,这里贴出代码,不做讲解 //这是main.cpp #include <iostream> #include "mul.hh" using namespace std; int main(void){ mul_string(); return 0; } /*这是mul.cpp*/ #include <iostream> using namespace std; int mul_string(cons

madannasf的博客 193

安信可TB蓝牙模组系列 实战Ble Mesh智能照明系统搭建

本文详细介绍了如何使用安信可TB蓝牙模组系列搭建Ble Mesh智能照明系统。从硬件准备、固件烧录到手机APP组网全流程,提供了实战步骤和优化建议,特别适合智能家居开发者入门。Ble Mesh的自组网能力解决了蓝牙传输距离限制,实现全屋灯光智能控制。

weixin_30856725的博客 352

C++ 多态性有哪些

C++多态性有哪些?       概念:指相同的对象收到不同的消息或者不同的对象收到相同的消息时产生的不同的实现动作。 C++支持两种多态:编译时多态(静态)、运行时多态(动态) (1)编译时多态:就是在编译期确定的一种多态。在C++中主要体现在函数模板,这里需要注意,函数重载和多态无关,很多地方把函数重载误认为是编译多态,这是错误的???      举例说明一下函数模板是如何体

YF_Li123的博客 1万+

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法

Robot_PLC_HMI_Automation 1万+

需要Perfetto分析的anr

anr类的问题,经常会有系统cpu,内存负载不高,iowait也不高,主线程状正常的,这类问题通过常规的日志无法分析,需要抓取Perfetto来分析应用的情况。event log中也没有异常。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 63

C++的多态性

C++的多态性主要是重载和虚函数。 一: 先是重载,分为函数重载和运算符重载。 函数重载:虽然函数名相同,但是函数内容不同,靠参数不同来区分。 例子: 对 f() 进行重载: #include<iostream> #include<algorithm> #include <vector> #include <fstream> using namesp...

藏经阁 4977

node运行项目-Network: unavailable-没有ip地址

vscode运行vue项目后发现Network: unavailable 是什么情况呢?可能有一下三种情况:1.多个网卡原因:打开网络共享中心,把多余的网络禁用掉,只留一个2.在中配置host及public3.系统环境变量问题。

JackieDYH的博客 7539

【Journey to the Cpp】Series之多态性与虚函数

关卡三:多态性与虚函数

m0_46308522的博客 754

基于加速科技ST2500的SN74HC00N芯片测试计划

实际上随着工艺的进步,器件内部和引脚间的绝缘氧化膜越来越薄,导致漏电流发生的概率更大,另外制造过程中的工艺缺陷导致的桥接,异物或封装过程中造成的芯片划伤、引裂,都会造成IC的漏电流偏大,有部分产品可能会表现出漏电流偏大,但功能正常,此类产品具有潜在的可靠性问题,漏电流测试的目的就是把具有此类缺陷的产品筛选出来,避免其流到最终产品造成更大的损失。漏电流的测试方法相对简单,就是根据产品手册或测试规范对被测引脚施加额定的电压,然后测量其输入或流出的电流是否符合相应的设计规范。74HC00引脚功能如表所示。

weixin_68288412的博客 1437

【YOLO系列】YOLOv8详解:模型结构、损失函数、训练方法及代码实现

YOLOv8是Ultralytics团队2023年推出的高效目标检测框架,在速度与精度平衡、多任务支持和易用性方面实现突破。模型采用改进的CSPDarknet主干网络、C2f模块和SPPF加速结构,结合PAN-FPN特征融合和解耦检测头设计,支持目标检测、实例分割和关键点检测任务。创新性地使用CIoU定位损失、Focal Loss置信度损失和动态样本分配策略,显著提升检测性能。实验表明,YOLOv8较前代模型mAP提升5-10%,在TensorRT加速下可达1000FPS,提供5种尺寸灵活选择,成为实时目标

一碗白开水一 2779

【C++】5.1 编译时的多态性与运行时的多态性

5.1 编译时的多态性与运行时的多态性 1、什么时多态性 【定义】 (1)在面向对象方法中,不同对象收到相同的消息时,产生不同的行为(即方法) (2)在C++程序设计中,多态性是指用一个名字定义不同的函数,函数执行不同但类似的操作,可以实现用同一个函数名调用不同的内容的函数。“一个接口,多种方法” 2、静态联编和动态联编 【静态联编】: 定义:又称前期联编,系统在编译时就决定如何实现...

Alvin的博客 4936

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关于C++中静态多态性和动态多态性的理解

1. 什么是多态性 1.0多态的简要介绍:多态中的态为形态的意思,在面向对象编程中是指向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。举个例子通俗来讲就是:比如说开学了,校长把这个消息发送给了所有人,但是所有人都是一样的反应吗?老师的行为是我需要提前备好课,学生的行为是准备好作业去学校,家长需要筹集学费。然后按照其特性来又分为静态多态性和动态多态性这两种,那么这两种又有什么区别呢?...

qq_43247276的博客 4367

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c++的动态多态性的几种情况

c++的多态性分为静态多态性与动态多态性。比如函数重载,一个函数名给出不同的参数,实现功能上大体相同细节上因情况而定的多态性,这种多态性是在编译的时候就确定了的,称为静态多态性;一种是动态多态性,是子类继承父类时,子类中函数覆盖父类中同名函数,这样在实际调用该函数时需要根据实例的类型(是父类还是子类)确定使用哪个函数,从而产生的多态性。动态多态性主要是通过虚函数实现的。现列举以下几种情况说明动态多...

liyunxin_c_language的博客 1868

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++多态性的总结

抽空总结下对一直以来对C++多态性的一点个人理解: 1.什么叫早绑定和晚绑定? 早绑定指在对象声明的时候就和它的类型建立了关联。晚绑定是指代码在运行时再检查对象是否提供了我们所需要的方法和属性。 静态关联(早绑定)和动态关联(晚绑定)。 2.什么叫多态性? 一个接口,多种方法。 3.多态性和非多态性的区别? 多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的...

weixin_34090562的博客 654
上一篇: C++继承与派生
下一篇: C++抽象类
SunnyHughLee
博客等级 码龄12年 8粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值