C++学习第16课,多态的类型转换

2019-06-16  本文已影响0人  Mr小熊_1da7

1 隐式类型转换

double d = 1001.1;

int u = d; //double转为int、

char *str = "100ask.taobao.com"

int *p = str;//char*转为int*

注意:编译器汇报警告

2 显式类型转换 c风格

c风格:(强转)

double d = 1001.1;

int u = (int)d; //double转为int、

char *str = "100ask.taobao.com"

int *p = (int*)str;//char*转为int*

注意:强转逻辑没有保障,由程序员保证程序的逻辑性。

3 显式类型转换 c++风格

reinterpret_cast:和C风格的强转是一样的。

格式:reinterpret_cast<type-id> (expression)

1. type-id必须是一个指针、引用、算术类型、函数指针或者成员指针

2. 它可以把一个指针转换成一个整数,也可以把一个整数转换成 一个指针

3 跟c风格的强制转换类似,没有安全性检查

const_cast:

格式:const_cast<type_id> (expression)

该运算符用来去除原来类型的const或volatile属性。除了const或volatile修饰之外,type_id和experssion的类型是一样的。

dynamic_cast

格式: dynamic_cast <type-id> (expression)

该运算符把expression装成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;

如果type-id是类的指针类型,那么expression也必须是类的指针;

如果type-id是类的引用类型,那么expression也必须是类的引用;

注意,1用于多态,即:必须有虚函数

2.主要用于类层次间的上下转换,还可以用于类之间的交叉转换,dynamic_cast和static_cast效果是一样的,在进行上下转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

static_cast

格式:static_case <type-id> (expression)

该运算符把expression转换为type-id类型

但没有运行时类型检查来保证转换的安全性。

上一篇 下一篇

猜你喜欢

热点阅读