指针类型数据什么意思_指针是什么数据类型

指针类型数据什么意思_指针是什么数据类型C++四种基本类型转换C++四种基本类型转换 1.static_cast基本类型转换指针转换的限制左值转右值上下行转换 2.const_cast去常性const 编译时的替换 3.reinterpret_cast指针类型间的强制转换 4 .dynamic_cast初

C++四种基本类型转换   C++四种基本类型转换 1.static_cast基本类型转换指针转换的限制左值转右值上下行转换 2.const_cast去常性const 编译时的替换 3.reinterpret_cast指针类型间的强制转换 4 .dynamic_cast初识动态转换验证多态才能实现动态转换反向 多态   1.static_cast   用法: static_cast<type_name> (expression)   说明:该运算符把expression转换为typen_name类型,static_cast在编译时使用类型信息执行转换,在转换执行必要的检测(诸如指针越界计算,类型检查等);但没有运行时类型检查来保证转换的安全性。   枚举是收到限制的整型,取值范围收到限制,枚举不能++   静态转换两者类型要兼容,而且不能去常性,但是可以加常性   无类型指针可以转成任意类型   基本类型转换   x = static_cast(a);只是将a转成这种类型   x = static_cast(a);   静态转换这个不报错。x和a都是0   目的就是枚举类型的转为整型,不报错。   
在这里插入图片描述   指针转换的限制   基本类型指针无法转化。   可以加常性,但是不能去常性,你要是可 去常性 const_cast干嘛??????   左值转右值   rx x 都是a的别名   上下行转换   继承关系:   不同类的指针还能用static_cast转换,但是下行转换没有意义。但是不报错,   但是,不同类对象只能大对象赋值小对象。就算是用static_cast 也会报错   bp = static_cast<Base*>(&obj);这里虽然可以编译,但是逻辑上是错误的,内存填充的是默认值,bp = op;//error这里直接就无法编译   上行转换安全,下行转换不安全   2.const_cast   用法:const_cast <type_name>(expression)   可以适用基本类型,也可以用在自己设计的类型   说明:该运算符用来修改类型的const或volatile属性。除了const或volatile修饰之外,typename和expression的类型是一样的。   去常性   特点:   1)用于去除变量的只读属性   2)强制转换的目标类型必须是指针或引用   const 编译时的替换   由于ca是常整型,但是在编译的时候,ca已经被替换成了10,虽然它确实是变成了20,但是打印的还是10   而Int就不一样了,是常对象,去常性后,就可以修改   
在这里插入图片描述   3.reinterpret_cast   用法: reinpreter_cast <type_name>(expression)   说明: type_name必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。类似C语言的强转。   特点:   不适用基本数据类型之间的转换   用于指针类型间的强制转换   指针类型间的强制转换   基本数据类型指针的转换,和非继承 关系的类指针的转换,但是不安全。   p+1的能力跟指向的类型无关,根自己的类型有关   
在这里插入图片描述   
在这里插入图片描述   对象和对象中的数据成员value是同一个地址   4 .dynamic_cast   语法: dynamic_cast <typen_ame> ( expression )   说明: dynamic_cast操作符,它允许在运行时刻进行类型转换,从而使程序能够在一个类层次结构中安全地转换类型,把基类指针转换成派生类指针,或把指向基类的左值转换成派生类的引用。   必须是公有继承,基类要有虚函数。   特点:   1.与C++支持的其他强制转换不同的是,dynamic_cast是在运行时执行的类型转换。   ⒉.如果针对指针类型的dynamic_cast失败,则dynamic_cast的结果是nullptr。   3.如果针对引用类型的dynamic_cast失败,则dynamic_cast会抛出一个异常。   4.在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。   5.在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。   初识动态转换   人家本来是基类的指针指向派生类对象,可以实现多态,可是用dynamic_cast将基类指针转成了派生类指针,多态性消失   只有dynamic_cast多态转换的对象必须要发生多态,否则返回为空   总结:   Object* op1 = nullptr, op1 = &base; op1在用静态函数时,他就是Object*, 但是有虚函数时,就是Base*,通过动态转换Base* bp = nullptr;, bp = dynamic_cast<Base*>(op1); op1在用静态函数时,和虚函数时,都就是Base*   
在这里插入图片描述   验证多态才能实现动态转换   typeid(*op1).name() 能知道指针所指之物是存储了类型识别信息   
在这里插入图片描述   反向 多态   这里下行转换,就不行   
在这里插入图片描述   
在这里插入图片描述

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/81471.html

(0)
上一篇 2024年 8月 1日 下午10:51
下一篇 2024年 8月 1日 下午10:56

相关推荐

关注微信