父类指针可以指向子类对象
结论:父类指针可以指向子类对象,但是只能访问父类成员,不能访问子类成员
结论:子类指针不可以指向父类对象,需要类型转换才可以
笔记:
<1>.当基类指针指向派生类的时候,只能操作派生类从基类中继承过来的数据.
<2>.当派生类指向基类的指针,因为内存空间比基类长,访问的话会导致内存溢出,所以不允许派生类的指针指向基类。
加深理解:
<1>.通常来说,子类肯定含有父类所有的成员变量和方法函数.所以用父类指针指向子类时,没有问题
,因为父类有的,子类都有,不会出现非法访问问题.
<2>.如果用子类指针指向父类的话,一旦访问子类特有的方法函数或者成员变量(基类是没有的),就会出现非法访问;
因为被子类指针指向的由父类创建的对象,根本没有要访问的那些内容,那些是子类特有的,只有用子类初始化对象时才会有.
通过 static_cast、dynamic_cast可以解决这个问题
1 static_cast
用法:static_cast < type-id > ( exdivssion )
该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:
①用于类层次结构中基类和子类之间指针或引用的转换。
进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
③把空指针转换成目标类型的空指针。
④把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉exdivssion的const、volitale、或者__unaligned属性。
2 dynamic_cast
用法:dynamic_cast < type-id > ( exdivssion )
该运算符把exdivssion转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;
如果type-id是类指针类型,那么exdivssion也必须是一个指针,如果type-id是一个引用,那么exdivssion也必须是一个引用。
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
————————————————
版权声明:本文为CSDN博主「C-mac」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34673519/article/details/105247122
父类指针可以指向子类对象相关推荐
- Java 父类的引用指向子类对象有啥用 总结
1. 你可能会写如下2个方法 feed(Cat cat){ } feed(Dog dog){ } 如果Cat.Dog都是Animal的子类,那你就可以写成 feed(Animal anim ...
- 为什么父类引用可以指向子类对象 子类引用不能指向父类对象 泛型
假设有父类Fu ,其子类为Zi ,从对象的内存角度,假设Fu类里面的变量占内存2M, Zi 类里的变量占内存1M: Fu f = new Fu ();//系统将分配2M内存 Zi z = new Zi ...
- 父类指针指向子类对象的问题、父类对象和子类对象之间的问题
一.父类指针指向子类对象 先上代码: class Base {public:void base_fun1() {}virtual void base_fun2() {cout << &qu ...
- java父类引用子类_java多态,如何理解父类引用指向子类对象
要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...
- C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变
C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变 例子: class A{int a;int b; };class B:public A{int c; };int main(){B* ...
- 父类(指针、引用)指向子类对象
父类(指针.引用)指向子类对象 1. 父类类型指向子类对象 include <stdlib.h> #include <iostream> using namespace std ...
- Java多态 父类引用指向子类对象
原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...
- 父类引用指向子类对象详解
父类引用指向子类对象 父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal ani ...
- java子类引用指向父类对象_Java多态 父类引用指向子类对象
Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father c = new Child() 在c的 ...
最新文章
- lamp 独立mysql_lamp or lnmp 环境搭建之独立安装mysql数据库
- Fedora Workstation 30是激动人心的、功能丰富的更新
- 整数划分问题【递归以及递推求解方式】
- Python基础(五)--函数
- javafx应用启动自动执行函数_JavaFx:Application start方法中的异常
- Arduino笔记-解决上传时出现avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00问题
- 为 SQL Server 启用 AWE 内存。
- [BZOJ3297][USACO2011 Open]forgot
- 【Spring-tx】事务。
- java 预览word文档_Java版office文档在线预览
- Spring Cloud 中文网
- 六度空间 c语言 【详解】
- 很好看的source insight配色方案
- 即时通信软件实现原理
- 如何对 Excel 中的数据使用 SQL 查询
- 理论小知识:获取AUTO_INCREMENT值
- 1741. Communication Fiend(dp)
- node-redis 秒杀高并发案例
- html中两个日期相减,在Excel中如何让两个时间相减?
- 用XCA(X Certificate and key management)可视化程序管理SSL 证书(1)--安装XCA
热门文章
- association判断不为空时_mybatis 一对一关联 association 返回空值
- 学习聚宽4:函数 下单函数 自定义函数(笔记简单,但是需要重点看)
- 我竟然被淘口令骗了500大洋...
- 理解体检报告10个必须项目
- Linux系统编程第六节——进程的替换(execl、exelp、execle、execv、execvp、execve)
- PMP快速通过经验分享
- 【php】php开发环境的搭建
- 2023电工杯数学建模竞赛B题思路解析+代码+论文
- TIME_WAIT详解
- [SV]SystemVerilog压缩数组(Packed Array)和非压缩数组( Unpacked Array)