Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++多态实现

C++多态实现

作者头像
lexingsen
发布于 2022-02-25 01:08:21
发布于 2022-02-25 01:08:21
45900
代码可运行
举报
文章被收录于专栏:乐行僧的博客乐行僧的博客
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <functional>
using namespace std;



using EatPtr = function<void()>;
using PlayPtr = function<void()>;
struct VirtualTable {
	EatPtr m_eat;
	PlayPtr m_play;
};

struct Base {
	VirtualTable m_table;
};

struct DeriveA {
	Base m_base;
};

struct DeriveB {
	Base m_base;
};

void BaseEat() {
	cout << "base eat" << endl;
}

void BasePlay() {
	cout << "base play" << endl;
}

void DeriveAEat() {
	cout << "derive a eat" << endl;
}
void DeriveAPlay() {
	cout << "derive a play" << endl;
}

void DeriveBEat() {
	cout << "derive b eat" << endl;
}
void DeriveBPlay() {
	cout << "derive b play" << endl;
}



int main() {
	DeriveA a;
	DeriveB b;
	a.m_base.m_table.m_eat = DeriveAEat;
	a.m_base.m_table.m_play = DeriveAPlay;
	
	b.m_base.m_table.m_eat = DeriveBEat;
	b.m_base.m_table.m_play = DeriveBPlay;
	
	Base* basea = (Base*)&a;
	basea->m_table.m_eat();
	basea->m_table.m_play();
	
	Base* baseb = (Base*)&b;
	baseb->m_table.m_eat();
	baseb->m_table.m_play();
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态 举个例子:比如说买票,普通人是全价买,学生是半价,退伍军人是优先。
有礼貌的灰绅士
2023/04/06
3080
C++多态
24.C++- 抽象类(存虚函数)、接口、多重继承
抽象类和接口 什么是抽象类 用来表示现实世界中的抽象概念 是一种只能定义类型,而不能产生对象的类 只能被子类继承,且抽象类的相关成员函数没有完整的体现,用来被子类重写. 比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。 而继承它的子类(矩形,圆形,三角形等)就可以去重写area()成员函数. 里面通过数学公式,计算出面积. 参考图形(Shape)类,代码如下: class Shape { public: double ar
诺谦
2018/04/19
7870
24.C++- 抽象类(存虚函数)、接口、多重继承
C++复习篇
2.指针const 1) 底层const(位于*左侧) const int *p : const修饰*p为常量,也就是说该指针指向的对象内容是个常量,只能改变指向的地址.但是可以通过其他方式修改对象内容 例如:
诺谦
2019/05/24
1.4K0
【C++】多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
zxctscl
2024/04/25
1160
【C++】多态
8.5 C++ 继承与多态
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
王 瑞
2023/10/21
2500
8.5 C++ 继承与多态
C++【多态】
多态 是面向对象三大基本特征中的最后一个,多态 可以实现 “一个接口,多种方法”,比如父子类中的同名方法,在增加了多态后,调用同名函数时,可以根据不同的对象(父类对象或子类对象)调用属于自己的函数,实现不同的方法,因此 多态 的实现依赖于 继承
北 海
2023/07/01
1720
C++【多态】
C++模板总结
模板(Template)指 C++ 程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如 STL 以及 IO Stream。模板是 C++ 支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
C语言与CPP编程
2021/12/10
1.3K0
C++模板总结
【C++】三大特性之多态
多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会
青衫哥
2023/03/31
8180
【C++】三大特性之多态
今天你学C++了吗?——C++中的继承
继承?什么是继承?在生活中,我们可以听到继承人这样的专有名词,那么C++中的继承是什么呢?我们来看看继承的概念~
用户11352420
2025/03/13
1420
今天你学C++了吗?——C++中的继承
C++一些例子
虚析构 #include<iostream> class Base { public: Base() { std::cout << "base 构造" << std::endl; } virtual~Base() { std::cout << "base 析构" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "derived 构造" << std::endl; } ~Derive
玖柒的小窝
2021/12/15
4010
面试系列之C++的对象布局【建议收藏】
我们都知道C++多态是通过虚函数表来实现的,那具体是什么样的大家清楚吗?开篇依旧提出来几个问题:
C语言与CPP编程
2020/12/02
1.7K0
面试系列之C++的对象布局【建议收藏】
【C++】从零开始认识多态
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。
叫我龙翔
2024/05/08
1000
【C++】从零开始认识多态
【C++】多态(下)
通过查询内存发现,虚表指针中存在三个地址,而其中两个正好为监视中的两个地址 猜测 0x00c4146a 就是Func4的地址
lovevivi
2023/05/07
2860
【C++】多态(下)
C++虚函数表详解
C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图一样,指明了实际所应该调用的函数。
用户7886150
2021/02/03
7080
C/C++开发基础——函数对象与std::function模板
函数对象可以被当作一个值赋给另一个变量,也可以作为实参传递给其他函数,或者作为其他函数的返回结果。
Coder-ZZ
2023/02/23
9300
C/C++开发基础——函数对象与std::function模板
C++-面向对象(六)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/10/28
3120
C++-面向对象(六)
【C++航海王:追寻罗杰的编程之路】C++11(四)
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
枫叶丹
2024/06/04
1610
【C++航海王:追寻罗杰的编程之路】C++11(四)
C++函数、虚函数和函数对象:从基础到应用
在C++编程中,函数、虚函数和函数对象是三个重要的概念。它们在程序设计中扮演着不同的角色,理解它们的区别和应用场景对于编写高效、灵活的代码至关重要。本文将详细探讨这三者的定义、特点、使用场景以及更进一步的引申,并通过实例帮助读者更好地理解这些概念。
码事漫谈
2024/12/27
2410
C++函数、虚函数和函数对象:从基础到应用
【C++】基类数组不可以使用多态原因
数组的分配是采用:首地址+偏移量的方式,而偏移量是固定大小的,例如:Node arry[10];
灰子学技术
2020/04/02
8410
4.6 C++ Boost 函数绑定回调库
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质量和性能,并且可以适用于多种不同的系统平台和编译器。Boost库已被广泛应用于许多不同领域的C++应用程序开发中,如网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。
王 瑞
2023/08/21
3750
相关推荐
C++多态
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验