结论:父类指针可以指向子类对象,但是只能访问父类成员,不能访问子类成员

结论:子类指针不可以指向父类对象,需要类型转换才可以

笔记:
<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

父类指针可以指向子类对象相关推荐

  1. Java 父类的引用指向子类对象有啥用 总结

    1. 你可能会写如下2个方法 feed(Cat cat){    } feed(Dog dog){    } 如果Cat.Dog都是Animal的子类,那你就可以写成 feed(Animal anim ...

  2. 为什么父类引用可以指向子类对象 子类引用不能指向父类对象 泛型

    假设有父类Fu ,其子类为Zi ,从对象的内存角度,假设Fu类里面的变量占内存2M, Zi 类里的变量占内存1M: Fu f = new Fu ();//系统将分配2M内存 Zi z = new Zi ...

  3. 父类指针指向子类对象的问题、父类对象和子类对象之间的问题

    一.父类指针指向子类对象 先上代码: class Base {public:void base_fun1() {}virtual void base_fun2() {cout << &qu ...

  4. java父类引用子类_java多态,如何理解父类引用指向子类对象

    要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...

  5. C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变

    C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变 例子: class A{int a;int b; };class B:public A{int c; };int main(){B* ...

  6. 父类(指针、引用)指向子类对象

    父类(指针.引用)指向子类对象 1. 父类类型指向子类对象 include <stdlib.h> #include <iostream> using namespace std ...

  7. Java多态 父类引用指向子类对象

    原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...

  8. 父类引用指向子类对象详解

    父类引用指向子类对象 父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal ani ...

  9. java子类引用指向父类对象_Java多态 父类引用指向子类对象

    Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father  c  =  new  Child()    在c的 ...

最新文章

  1. lamp 独立mysql_lamp or lnmp 环境搭建之独立安装mysql数据库
  2. Fedora Workstation 30是激动人心的、功能丰富的更新
  3. 整数划分问题【递归以及递推求解方式】
  4. Python基础(五)--函数
  5. javafx应用启动自动执行函数_JavaFx:Application start方法中的异常
  6. Arduino笔记-解决上传时出现avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00问题
  7. 为 SQL Server 启用 AWE 内存。
  8. [BZOJ3297][USACO2011 Open]forgot
  9. 【Spring-tx】事务。
  10. java 预览word文档_Java版office文档在线预览
  11. Spring Cloud 中文网
  12. 六度空间 c语言 【详解】
  13. 很好看的source insight配色方案
  14. 即时通信软件实现原理
  15. 如何对 Excel 中的数据使用 SQL 查询
  16. 理论小知识:获取AUTO_INCREMENT值
  17. 1741. Communication Fiend(dp)
  18. node-redis 秒杀高并发案例
  19. html中两个日期相减,在Excel中如何让两个时间相减?
  20. 用XCA(X Certificate and key management)可视化程序管理SSL 证书(1)--安装XCA

热门文章

  1. association判断不为空时_mybatis 一对一关联 association 返回空值
  2. 学习聚宽4:函数 下单函数 自定义函数(笔记简单,但是需要重点看)
  3. 我竟然被淘口令骗了500大洋...
  4. 理解体检报告10个必须项目
  5. Linux系统编程第六节——进程的替换(execl、exelp、execle、execv、execvp、execve)
  6. PMP快速通过经验分享
  7. 【php】php开发环境的搭建
  8. 2023电工杯数学建模竞赛B题思路解析+代码+论文
  9. TIME_WAIT详解
  10. [SV]SystemVerilog压缩数组(Packed Array)和非压缩数组( Unpacked Array)