C++中的四类强制转换?
来源:互联网 发布:服务器端 语言 python 编辑:程序博客网 时间:2024/06/03 21:03
C++中的四类强制转换?
例:
class ClassA
{
{
}
virtual void FunctionA()
{
}
};
class ClassB
{
public:
virtual void FunctionB()
{
}
};
class ClassC: public ClassA, public ClassB
{
public:
};
ClassC aObject;
ClassA *pA = &aObject;
ClassB *pB = &aObject;
ClassC *pC = &aObject;
假设定义了ClassA* pA2,
下面正确的代码是:BD
A:pA2=static_cast<ClassA*>(pB);
B:void* pVoid=static_cast<void*>(pB); pA2=static_cast<ClassA*>(pVoid);
C:pA2=pB;
D:pA2=static_cast<ClassA*>(static_cast<ClassC*>(pB));
解析1:
A 两个无关类型指针之间的转换 是不合法的
B 通过void*这个媒介 ,合法
C 直接赋值,无法进行隐式转换,不合法
D 通过继承体系中的一个 做媒介, 上行 下行 合法
解析2:
static_cast(编译器可实现的隐式转换或类层次间的下行转换)、
dynamic_cast(操作数只能为类指针或类引用)、
const_cast(去除const)、
reinterpret_const(一般意义强制转换)
经测试,BD选项都可以通过编译,然而B选项明显不安全。
如果想安全的将classB的指针转换到classA的指针,需要将pB的值向前调整sizeof(ClassA)个大小。
D选项可以做的。但B选项通过Void直接把pB的值赋值给了pA2,并未进行位置调整,所以说是不安全的。
例:
class ClassA
{
public:
virtual ~ ClassA()
{
}
virtual void FunctionA()
{
}
};
class ClassB
{
public:
virtual void FunctionB()
{
}
};
class ClassC: public ClassA, public ClassB
{
public:
};
ClassC aObject;
ClassA *pA = &aObject;
ClassB *pB = &aObject;
ClassC *pC = &aObject;
假设定义了ClassA* pA2,
下面正确的代码是:BD
A:pA2=static_cast<ClassA*>(pB);
B:void* pVoid=static_cast<void*>(pB); pA2=static_cast<ClassA*>(pVoid);
C:pA2=pB;
D:pA2=static_cast<ClassA*>(static_cast<ClassC*>(pB));
解析1:
A 两个无关类型指针之间的转换 是不合法的
B 通过void*这个媒介 ,合法
C 直接赋值,无法进行隐式转换,不合法
D 通过继承体系中的一个 做媒介, 上行 下行 合法
解析2:
static_cast(编译器可实现的隐式转换或类层次间的下行转换)、
dynamic_cast(操作数只能为类指针或类引用)、
const_cast(去除const)、
reinterpret_const(一般意义强制转换)
经测试,BD选项都可以通过编译,然而B选项明显不安全。
如果想安全的将classB的指针转换到classA的指针,需要将pB的值向前调整sizeof(ClassA)个大小。
D选项可以做的。但B选项通过Void直接把pB的值赋值给了pA2,并未进行位置调整,所以说是不安全的。
阅读全文
0 0
- C++中的四类强制转换?
- C中的类型强制转换
- C++中的四种强制转换
- C++中的四种强制类型转换
- C++中的四种类型强制转换
- C++中的四种强制类型转换
- c++中的四种强制类型转换
- C++中的四种强制转换
- C++中的四种强制类型转换
- C++中的四种强制类型转换
- 【C++】 四种强制类型转换
- [强制类型转换]C语言中的强制类型转换相关
- c与c++中的强制转换
- c语言中的强制转换 a++ ++a
- C语言中的强制类型转换
- 关于c语言中的强制类型转换
- C语言中的强制类型转换
- 四种强制转换
- gradle学习笔记(下)
- JSP--整合SiteMesh02
- 魔法工会
- vin码OCR识别解析查询
- volatile关键字
- C++中的四类强制转换?
- java学习(10) lambda表达式
- 系统学习java高并发系列三
- Debug与Release的区别
- 进程
- 百度地图API之本地搜索与范围搜索
- TensorFlow【深度学习】安装Tensorflow与测试
- 【BZOJ3670】【NOI 2014】动物园(KMP)
- python---批量创建文件夹