关于C++多态的理解
2024-09-04 15:15:03
多态,即多种形态。对于具有继承关系的一类对象,子类表现出了父类的某些特性,但是表现的不一样,这就是多态的现实体现。例如动物可以发声,但是狗是旺旺,狗是动物的一种,但是表现了不同的叫的特点,这就是多态。
若class B:public A
A* a=new B();对于这句话该怎么理解?
1.A* a规定了要分配的存储空间类型是类A的类型,该内存空间只能包含类A规定的属性和方法,A的继承类B以后添加的方法都没有包含进来。
2.new B()规定了被实例化的对象是B的实例对象,即是类B被分配了内存空间。
1和2两个规定求交集(红色文字求交集),表明B中只有继承自A的方法和属性才能被调用,B自己后来添加的新方法是不能被编译通过的,因为该内存空间没有空间分配给除类A以外的方法了。
因此c++规定:
1.如果方法需要被重写,那么最好加上virtual关键字,因为该关键字是实现多态的关键,不加也可以覆盖子类方法,但是缺少规范性;
2.不加virtual的方法,严格上讲最好不要被重写。
对于变量的理解:
type a;
type限定了该变量空间所存储变量需要遵守的规则,如对于int类型需要分配多大的空间;对于class类型,规定了为哪些方法和属性分配空间。
最新文章
- Java程序设计之最大公约数和最小公倍数
- C++使用继承时子对象的内存布局
- 42. Trapping Rain Water
- 使用EasyUI的插件前需要引入的文件
- javascript笔记——jQuery插件开发的几种方式
- cocos2d-x触屏事件(单点触屏)
- phpDesigner 7.2.5 注册码 更改 语法高亮 主题
- DWR3.0框架入门(3) —— ScriptSession的维护及优化
- jquery获取文件名称
- 获取子物体数量---Transform.childCount
- [译]Python作为一种编程语言有多强大?
- 最近最久未使用页面淘汰算法———LRU算法(java实现)
- How does the compilation and linking process work?
- 20172306 2018-2019-2 《Java程序设计与数据结构》第九周学习总结
- MyBatis 一级缓存和二级缓存及ehcache整合
- .net core 2.0 虚拟目录下载 Android Apk 等文件
- Oracle数据库基础教程
- Odoo8出现Internal Server Error的解决办法之一
- ssh出错 sign_and_send_pubkey: signing failed: agent refused operation
- 【Unity】3.6 导入图片资源