游戏开发之C++多继承及虚继承(C++基础)
游戏开发之C++多继承及虚继承(C++基础)
1.多继承的概念
概念:一个类(派生类)同时继承多个父类(基类)。
不推荐使用,因为多继承会带来非常严重的二义性(例如:继承的两个父类有同名的成员函数)。
多继承之菱形继承实例:
class F{public:int f;void PrintF(){std::cout << __FUNCTION__ << " " << __LINE__ << ":" << f << std::endl;}};class A :public F{public:int a;void Print(){f = 1;std::cout << __FUNCTION__ << " " << __LINE__ << ":" << f << std::endl;}};class B :public F{public:int b;void Print(){f = 2;std::cout << __FUNCTION__ << " " << __LINE__ << ":" << f << std::endl;}};//派生类C继承基类A、Bclass C : public A, public B{public:int c;};int main(){C c;sizeof(C);//20,A和B类的父类均为F类,F类有两份。//c.Print();错误,编译器无法清楚具体调用的是A、B、C三个类中哪个类的Printc.A::Print();c.B::Print();c.A::f = 1;c.B::f = 2;c.A::PrintF();//1c.B::PrintF();//2return 0;}
2.虚继承
虚继承用于解决菱形继承中公共基类有两份的问题。
虚继承会在每个定义虚继承的类中生成一个虚类指针(可通过sizeof验证)。
当定义为虚继承时,公共基类只有一份。
语法:
语法:类 变量名:virtual 访问权限 父类变量名1,virtual 访问权限 父类变量名2,…{成员列表}
实例:
class F{public:int f;void PrintF(){std::cout << __FUNCTION__ << " " << __LINE__ << ":" << f << std::endl;}};//A类虚继承F类class A :virtual public F{public:int a;void Print(){f = 1;std::cout << __FUNCTION__ << " " << __LINE__ << ":" << f << std::endl;}};//B类虚继承F类class B :virtual public F{public:int b;void Print(){f = 2;std::cout << __FUNCTION__ << " " << __LINE__ << ":" << f << std::endl;}};class C : public A, public B{public:int c;};int main(){//定义虚继承C c;//4(C类)+8(B类)+8(A类)+4(F类) = 24个字节。sizeof(C);//24,A和B类中编译器都添加了一个虚类指针,F类只有一份。//由于F类只有一份公共内存,所以f最终的结果是2。c.A::f = 1;c.B::f = 2;c.A::PrintF();//2c.B::PrintF();//2return 0;}
游戏开发之C++多继承及虚继承(C++基础)相关推荐
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
- 开发中的“软”与“硬”:高画质移动游戏开发之道
摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...
- DirectX游戏开发之3D角色动起(下)
DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...
- 游戏开发之U3D实现技能图标冷却的效果
游戏开发之U3D实现技能图标冷却的效果 --本次使用的NGUI插件. 制作思路:NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使 ...
- DirectX游戏开发之2D文字的实现
DirectX游戏开发之2D文字的实现 文字是承载信息最有效的载体之一,各种游戏程序都离不开文字的显示.对于3D文字来说,2D文字有其渲染的高效性和实现的简洁性. 2D文字的显示无论在写2D游戏还是在 ...
- 游戏开发之U3D插件EasyTouch5.x使用
游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...
- 微信小游戏开发之CocosCreator多分辨率场景适配方案
主题 Cocos Creator不同手机分辨率的背景图像和场景内容适配 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文 ...
- libGDX游戏开发之Box2D(十四)
libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...
- JAVA游戏开发之FPS精准控制
目录 JAVA游戏开发之FPS精准控制... 1 1 概述... 2 1.1 编写目的... 3 2 FPS精准控制... 3 2.1 FPS描述. ...
- C++继承详解三 ----菱形继承、虚继承
转载:http://blog.csdn.net/pg_dog/article/details/70175488 今天呢,我们来讲讲菱形继承与虚继承.这两者的讲解是分不开的,要想深入了解菱形继承,你是绕 ...
最新文章
- 浏览器tab关闭事件_Python--使用Pyqt5实现简易浏览器(最新版本测试过)
- LINUX内核分析第八周总结:进程的切换和系统的一般执行过程
- 解决Caused by: java.lang.NoSuchMethodException: com.mchange.v2.c3p0.cfg.C3P0Config.init()的总结...
- 《Python从小白到大牛》简介
- Android之Lollipop DevicePolicyManager学习(下)
- ASP.NET MVC 重点教程一周年版 第八回 Helper之演化
- c语言有啥简单的小程序,c语言-简单小程序-简单算法
- 发布web应用程序是出现unsafe code
- HDU2564 词组缩写【文本】
- NOIP 2011 Day 1
- Android插件实战总结之TwsPluginFramework
- 全国日照时数空间分布数据/月度降雨量分布/月均气温分布
- 【全网最全面C语言教程】C语言从入门到精通
- GD32E230开发初体验
- linux测坏道脚本,linux测试硬盘坏道
- 太吓人了,dub编译,编译phobos
- vue3安装vuex报错: Could not resolve dependency npm ERR peer vue@“^2.0.0“ from vuex@3.6.2
- 将当前列表视图导出到Excel中
- 强大的web打印插件--Lodop
- 操作系统装完之后,安装几个特别有用的经典软件,都是电脑必备,包含pdf编辑、图片编辑、wiki、压缩、影音等等
热门文章
- 一文搞懂常见概率分布的直觉与联系
- 每日算法系列【LeetCode 153】寻找旋转排序数组中的最小值
- conda - 创建虚拟环境并配置tensorflow-gpu
- 机器学习7-主成分分析
- linux--kubectl命令和docker命令
- 一千个哈姆雷特,一千个手游开发者
- 零基础的人也能学好C++
- 人生就是一次Presentation
- [tensorflow and keras] 自定义带权重的logloss
- 华数机器人编程语言_招新 | 海大最「酷」的科创团队,确定不来了解一下吗?...