C++多态

浅谈C++中的多线程(三):Qt中的多线程应用 本篇文章围绕以下几个问题展开: 何为进程?何为线程?两者有何区别? 何为并发?C++中如何解决并发问题?C++中多线程的语言实现? 同步互斥原理以及多进程和多线程中实现同步互斥的两种方法 Qt中的多线程应用 前三个问题已经在之前两篇文章中讲解,本篇文章作为结尾篇来讲解最后一个问题:Qt中的多线程应用。 四.Qt中的多线程应用 1.引入 程序由单线程到多线程,就像以前是一个人干... 阅读详情

多态分编译时多态和运行时多态:

编译时多态就是指函数重载,运算符重载,泛型编程。这个很好理解

运行多态是指使用虚函数来实现使用基类的对象的引用或指针来访问派生类成员,即使调用派生类中由基类申明的虚函数。这个也好理解,但是要和非虚函数覆盖区别开来


class Base {
private:
	int a;
public:
	Base(int i=100):a(i){}
	void get() const {
		cout<<"NO"<<endl;
	}
};
class Her:public Base{
public:
	void get()const {
		cout<<"YEs"<<endl;
	}

};
void mycall(Base &b) {
	b.get();
}

int main() {
	Base A;
	Her B;
	mycall(A);
	mycall(B);
	system("pause");
}
mycall(A),mycall(B)结果都调用了基类的get函数。 基类类型的指针或引用可以引用基类类型的对象,也可以引用派生类类型的对象。

无论实际对象时哪种类型,编译器都当做是基类类型的对象,因为将派生类对象当做基类对象是安全的。

结论:不管传给mycall的实际实参类型是什么,在编译的时候就确定了调用基类 的get函数。


使用虚函数

class Base {
private:
	int a;
public:
	Base(int i=100):a(i){}
	virtual void get() const {
		cout<<"NO"<<endl;
	}
};
class Her:public Base{
public:
	void get()const {
		cout<<"YEs"<<endl;
	}

};
void mycall(Base &b) {
	b.get();
}

int main() {
	Base A;
	Her B;
	mycall(A);
	mycall(B);
	system("pause");
}

使用了虚函数mycall(A)调用了基类的get函数,mycall(B)调用了派生类的get函数。

虚函数的好处就是,用户不用关心你当前针对的是基类还是派生类。

结论:根据传入实参实际类型不同,在运行时动态绑定各自的get函数。


class Base {
private:
	int a;
public:
	Base(int i=100):a(i){}
	virtual void get() const {
		cout<<"NO"<<endl;
	}
};
class Her:public Base{
public:
	void get()const {
		cout<<"YEs"<<endl;
	}

};
void mycall(Her &b) {
	b.get();
}

int main() {
	Base A;
	Her B;
	mycall(A);//出错,与mycall的形参类型不符
	mycall(B);
	system("pause");
}

上面这个列子意思就是,基类包含于派生类中,可以通过基类对象的引用或指针来代替派生类,当然只能访问基类中含有的成员。

也可以使用覆盖虚函数机制,使用作用域操作符覆盖函数:比如要调用派生类Her的get函数,可以使用 Her::get();



结论:使用非虚函数:函数形参为基类对象的引用(或指针),在调用该函数的时候,无论实际对象是基类还是派生类对象,都执行基类类型定义的函数。

使用虚函数:函数形参为基类对象的引用(或指针),在调用该函数的时候,由实际的对象类型动态绑定不同的虚函数。



注意:基类对象的引用和基类对象作为形参的区别

1.基类对象作为形参:即使是定义的虚函数,传入派生类对象,也会调用该基类的虚函数,而不是派生类的虚函数。因为以基类对象作为形参,会将传入的派生类对象的基类部分复制到形参。


class Base {
private:
	int a;
public:
	Base(int i=100):a(i){}
	virtual void get() const {
		cout<<"NO"<<endl;
	}
};
class Her:public Base{
public:
	void get()const {
		cout<<"YEs"<<endl;
	}
	void get1() {
		cout<<"get1"<<endl;
	}

};
void mycall(Base b) {
	b.get();
	/*
	将派生类对象传给希望接收基类类型对象的形参,派生类对象的基类部分被复制到形参
	*/
}
void mycall(Base &b) {
	b.get();
/*
将派生类对象传给接收基类类型引用的形参,引用直接绑定该该对象,对象本身没有复制,
这个不会改变对象是派生类的现状mycall(B);结果B还是派生类对象。
*/
}


int main() {
	Base A;
	Her B;
	mycall(A);
	mycall(B);
	system("pause");
}


从7V到28V宽压输入,手把手教你设计一个5V/3A的DCDC电源模块(附MPS1584选型与原理图避坑) 本文详细解析了基于MPS1584芯片的7V至28V宽压输入到5V/3A输出的DCDC电源模块设计全流程。从电源架构选择、原理图设计要点到实际调试经验,涵盖了输入保护电路、功率转换核心电路及系统级优化测试,帮助工程师规避常见设计陷阱,实现高效稳定的电源解决方案。 阅读详情

相关推荐

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6965

c++多线程运行多个类的相同函数

c++多线程运行多个类的相同函数

weixin_44654161的博客 1212

在VS2019里把JSBSim飞行模型集成到你的C++项目里(附完整配置流程和常见错误解决)

本文详细介绍了如何在Visual Studio 2019中将JSBSim飞行模型集成到C++项目中,包括环境准备、源码编译、项目配置和常见错误解决方案。通过实战技巧和优化建议,帮助开发者高效实现高精度飞行仿真功能,提升开发效率。

weixin_42620202的博客 413

【C/C++】多态

目录1.多态的概念1.1什么是多态?1.2为什么要用多态呢?1.3多态有什么好处?2.多态的定义及实现2.1继承中构成多态的条件2.2虚函数2.3虚函数的重写2.4C++11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比3.抽象类3.1概念3.2实现继承和接口继承4.多态的原理4.1虚函数表4.2多态的原理4.3 动态绑定与静态绑定5.单继承和多继承关系的虚函数表5.1 单继承中的虚函数表5.2 多继承中的虚函数表 1.多态的概念 1.1什么是多态? 多态是在不同继承关系

https://blog.youkuaiyun.com/WL0616 903

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

移远EC20模块USB模式切换的底层逻辑与驱动适配探秘

本文深入探讨了移远EC20模块USB模式切换的底层逻辑与驱动适配机制,详细解析了AT命令控制下的USB0与WWAN0模式差异。通过分析USB协议栈、内核驱动框架及网络子系统的交互,提供了模式切换的完整操作流程和常见问题解决方案,助力开发者优化4G通信模块在嵌入式设备中的稳定连接。

cc789的博客 845

5、多态、异常和多线程

多态 对象的多态性。 class 动物{} class 猫 extends 动物{} class 狗 extends 动物{} 猫 x = new 猫(); 动物 x = new 猫();//一个对象,两种形态。 猫这类事物即具备者猫的形态,又具备着动物的形态。这就是对象的多态性。  简单说:就是一个对象对应着不同类型.  多态在代码中的体现: 父类或者接口的引用指向其

GaryMa的专栏 1518

【超详细】C#的单例模式

本文详细介绍了C#中的单例设计模式,包括两种实现方式:普通类泛型单例(Singleton<T>)和基于MonoBehaviour的组件单例(MonoSingleton<T>)。单例模式通过私有构造、静态私有实例和公共访问入口确保全局唯一实例,具有节省资源、保证数据一致性等优势。文章分别阐述了两者的核心原理、代码实现、使用场景及注意事项,并提供了日志管理器和音效管理器的具体应用示例。特别强调了多线程安全、初始化时机和避免过度使用等重要原则,为Unity开发中合理运用单例模式提供了全面指导。

grapefruit_lyy的博客 1534

单例+多态+线程安全

单例多态多线程

sinat_31778393的博客 273

【逐函数讲解ORB_SLAM3源码】获取普通帧率、关键帧、IMU数据

获得imu的旋转 mRwc * mImuCalib.mTcb.rotationMatrix(); Sophus::SE3 mTwc 创建ORB_SLAM3系统 Create SLAM system. It initializes all system threads and gets ready to process frames. ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_RGBD, true, 0, file_nam

小秋 AI SLAM 入门实战教程 1245

PyTorch强化学习实战(1)——强化学习(Reinforcement Learning,RL)详解

在本节中,开始进入探索强化学习 (Reinforcement Learning, RL) 之旅,首先剖析了强化学习的独特之处及其与监督学习、无监督学习范式的关系。随后系统学习了强化学习的基础形式化框架及其内部关联机制,并深入讲解了马尔可夫过程 (Markov Process, MP)、马尔可夫奖励过程 (Markov Reward Process, MRP) 和马尔可夫决策过程 (Markov Decision Process, MDP),为后续学习奠定基础。

盼小辉丶的博客 2053

【c++】cpp多态

c++多态知识与原理

hutaotaotao的博客 1306

ARM6818嵌入式视频播放器:硬解加速与Framebuffer渲染实战

嵌入式Linux音视频系统是智能座舱、工业HMI等场景的核心能力,其本质是软硬协同的实时多媒体处理系统。原理上需打通内核驱动(如VPU硬件编解码、FIMD多图层合成)、用户空间框架(GStreamer pipeline定制、SDL2硬件渲染)与应用层同步机制(PTS/HTS双时钟校准)。技术价值在于显著降低CPU负载(硬解可压至15%以下)、提升启动速度(<1.2s首帧)并保障音画同步精度(±3ms级)。典型应用场景包括车载信息娱乐、边缘AI终端及无X11的工控显示设备。本文基于ARM6818平台,深入VP

weixin_32456485的博客 78

【CPP】类与多态

例如典中典的火车票的例子,设计一个自助售票函数,设计一个父类为乘客,设计一个子类继承自父类为学生,再设计一个子类继承自父类为军人,每个种乘客类型可以买不同价格的票,当这类对象作为参数(传引用/指针)传进一个为父类"乘客"的自助售票函数中,根据函数判断生成符合当前乘客身份的票。覆写的概念很重要,从字面意思咱就知道,子类的情况可能会和父类不太一样,此时我们就可以覆写掉父类的方法,改成我们想让子类所呈现的模式,当然,这里的覆写在底层的角度上其实说不上是覆写,这个后面的小节会提到。

2302_79981653的博客 1343

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c++ 多态 运行时多态和编译时多态_cpp和java中多态的理解

今天写一些小技巧帮助理解cpp和java里的多态,因为c++和java在多态的实现上,稍微有一点点不同,所以这里也会列出两者的不同,以免有时候会混淆。多态是所有面向对象的编程语言中非常重要的一个特性,多态的实现,可以允许在程序运行过程中,父对象根据当前赋给他值的子对象和特性决定调用自己的方法还是子类中复写的方法。1. c++多态c++中可以通过现下面四组概念来帮助我们理解和判断多态:对象的静态类型...

weixin_39628384的博客 314

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++的多态.cpp

/*多态包括模板/重载和虚函数 *其中模板和重载属于静态多态虚函数属于动态多态 */# include using namespace std;//定义模板类template class Base {public: Base():x_(0){}; Base(T n):x_(n){};    ~Base(){ cout }; virtual T Get() { //虚函数,当基类指针指向派生

东哥的博客 393

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

CPP多态

本文涉及的指针大小为x86系统32位4字节,如果是x64程序,则需要考虑指针是8bytes问题等等多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。

z202331720425的博客 1390

多态_cpp

一、什么是多态? 1.多态的概念 在面向对象方法:向不同的对象发送同一个消息,不同的对象在接收的时会产生不同的行为(即方法) 在C++中,多态性的表现形式之一:具有不同功能的函数可用同一个函数名,这样就可以实现用一个函数名调不同内容的函数。 用现实生活中的例子来说一下动态,比如说:学校开学,不同身份的人会有不同的反应。比如老师要备课上课

apt1203JN的博客 705

cpp中三种多态

cpp中三种多态 多态(Polymorphism)是一个大家耳熟能详的概念。在传统的C++教学中,我们通常认为“多态”是函数在类继承体系中所表现出来的一种行为。比如,在下面的例子中, template <typename T> T convertFromInt(int v); void f1() { convertFromInt<float>(5); convertFromInt<double>(5); } struct Base { virt

惜兰blog 1145

cpp中的多态

多态的实现依赖于继承,在继承的基础上实现。多态需要基类和派生类的目标函数完成三同:名字同,返回值同,参数类型同。想要实现多态,还有两个重要条件:1.必须是基类的指针或者引用调用了虚函数。只有基类的指针或者引用才能即指向基类又指向派生类。2.被调用的必须是虚函数,并且完成了虚函数的重写/覆盖。使得基类和派生类有不同的函数。

weixin_69318410的博客 745

Cpp中关于多态那些事

多态(可以有多种变化的情况奥)

Template Code 842

C++——多态

上述文章我们了解什么是多态,了解了多态的原理,希望对你有所帮助。

2301_76613753的博客 2046

Cpp_多态

一、虚函数、覆盖和多态如果将基类中的某个成员函数声明为虚函数,那么其子类中与该函数具有相同原型的成员函数就也是虚函数,并且对基类中的版本形成覆盖。这时,通过指向子类对象的基类指针,或者引用子类对象的基类引用,调用虚函数,实际被执行的将是子类中的覆盖版本,而非基类中的原始版本,这种语法现象被称为多态。二、虚函数覆盖的条件1.只有类的成员函数才能被声明为虚函数,全局函数和类的静态成员函数都不能被声明为虚

Jerry的专栏 2795

【C++】多态

多态的概念多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为,这⾥我们重点讲运⾏时多态。**编译时多态(静态多态)**主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时⼀般归为静态,运⾏时归为动态。,具体点就是去完成某个⾏为(函数),可以传不同的对象就会完成不同的⾏为,就达到多种形态。⽐如买票这个⾏为,当普通⼈买票时,是全价买票;

Octopus2077的博客 2015
上一篇: 常见动态规划(DP)
下一篇: 数划分
七绝乌梭
博客等级 码龄18年 5粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值