C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
/*
    名称:C++强制类型转换:static_cast、const_cast 、dynamic_cast、reinterpret_cast
    作者:Michael Joessy 
    日期:2017-06-05
    知识:
    C: 强制类型转换的一般形式为:(类型名)(表达式)
    使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?
    新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。
    C++中风格是static_cast<type>(content)。
    C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。
    程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。
*/

#include <iostream>
using namespace std;

class A
{};
class B:public A
{};
class C
{};

class D  
{  
public:  
    int m_iNum;  
    virtual void foo()
    {

}
};

class E:public D  
{  
public:  
   ];  
};

int main(void)
{

/************************************************************************/
    /* static_cast
    /* 用法:static_cast<type-id>(expression) 
    /* static_cast:可以实现C++中内置基本数据类型之间的相互转换。
    /* 如果涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换,不一定包含虚函数。
    /************************************************************************/
    ;
    int nTest = static_cast<int>(dTest);

A* a = new A;
    B* b;
    C* c;
    b = static_cast<B*>(a);      // 编译不会报错, B类继承A类
    //c = static_cast<B*>(a);    // 编译报错, C类与A类没有任何关系

/************************************************************************/
    /* const_cast
    /* 用法:const_cast<type_id> (expression)
    /* const_cast: const_cast操作不能在不同的种类间转换。
    /* 相反,它仅仅把一个它作用的表达式转换成常量。
    /* 它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。

    /************************************************************************/
    const A *pa = new A;                 // const对象    
    A *pb;                                 // 非const对象    
    //pb = pa;                           // 这里将出错,不能将const对象指针赋值给非const对象    
    pb = const_cast<A*>(pa);        // 现在OK了

/************************************************************************/
    /* dynamic_cast
    /* 用法:dynamic_cast<type-id>(expression)
    /* Type-id必须是类的指针、类的引用或者void *;
    /* 如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。
    /* dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
    /* dynamic_cast是运行时处理的,运行时要进行类型检查。
    /* 不能用于内置的基本数据类型的强制转换。
    /* dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。
    /* 使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过。
    /************************************************************************/
    D* pd = new D;
    E* pe1 = static_cast<E*>(pd);  
    E* pe2 = dynamic_cast<E*>(pd);   // 更安全

/************************************************************************/
    /* reinterpret_cast
    /* 用法:reinpreter_cast<type-id>(expression)
    /* 有着和C风格的强制转换同样的能力。
    /* 它可以转化任何内置的数据类型为其他任何的数据类型,也可以转化任何指针类型为其他的类型。
    /* 它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用。
    /* 使用reinterpret_cast 的场合不多,仅在非常必要的情形下,其他类型的强制转换不能满足要求时才使用。
    /************************************************************************/
    ;   
    double dNum1 = static_cast<double>(nInt);     
    double dNum2 = reinterpret_cast<double&>(nInt);  // 不提倡...

cin.get();
    ;
}

C++之强制类型转换的更多相关文章

  1. java中强制类型转换

    在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

  2. C++强制类型转换

    C语言强制类型转换过于粗暴,任意类型之间都可以进行转换,编译很难判断其正确性; 难于定位,在源码中无法快速定位所有使用强制类型转换的语句. C++将强制类型转换分为4种不同的类型:static_cas ...

  3. java提高篇(十一)-----强制类型转换

    在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

  4. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  5. C++强制类型转换操作符 dynamic_cast

    dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...

  6. C++强制类型转换操作符 const_cast

    const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转 ...

  7. C++强制类型转换操作符 static_cast

    static_cast是一个强制类型转换操作符.强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast.dynamic_cast.const_cast.reinterpert ...

  8. Js里面的强制类型转换

    js 和 PHP语言一样是弱类型语言.近期我也在看C语言,并没有传说中那么难,既是书中一再强调的指针部分,也没有那么夸张.至少是理论和语法理解起来不是很难.看起来凡是什么东西,不要总是被别人的话迷惑了 ...

  9. c语言强制类型转换

    一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf ("    (float)3/(float)2 ...

  10. 数据类型/强制类型转换 和运算符---标识符规则/关键字 a++和++a区别

    3.2关键字都是小写,TRUE FALSE NULL都不是Java关键字 3.3数据类型 变量相当于一个有名称的容器,该容器用于装各种不同类型的数据 Java类型分为2种 基本类型: 引用类型: 基本 ...

随机推荐

  1. Google C++ Coding Style 学习笔记

    写在前面:最新公司马上就要开始开发一款视觉产品,工程量较大,且需要对客户提供可以二次开 发的SDK,整个项目用C++编写. 这就对代码质量提出了非常高的要求,同时,如何设计出优雅稳定的API也是相当大 ...

  2. EXT-JS 6演示样例程序-Login演示样例程序

    1.        用Sencha Cmd生成应用程序模版 sencha -sdk /path/to/ExtSDK generate app -classic TutorialApp./Tutoria ...

  3. SQL数据库异地备份

    服务器:windows sever 2008(简称为A) 数据库:SQL server 2008 R2(安装在A上) 普通台式机:windows 7(简称为B) 目的:将A中的数据定时自动备份到B中 ...

  4. IHttpHandler的那些事

    写在前面 从上家公司离职,在家休息,闲着无聊,觉得还是有必要将IHttpHanlder的内容,做一个总结.发现在写demo的过程中,总觉得有点生疏了,项目中很少使用自定义的类来实现该接口.当然,一般处 ...

  5. python --对象的属性

    转自:http://www.cnblogs.com/vamei/archive/2012/12/11/2772448.html Python一切皆对象(object),每个对象都可能有多个属性(att ...

  6. 读写SQLServer数据库中的image类型数据(简单)

    1.将double类型的数据存储于image类型的变量中: (1). char *CManualForecastResultBll::DoubleArray2Binary(std::vector< ...

  7. 类声明、类作用域、前向声明、this指针、嵌套类、PIMPL 技法 等

    一.类声明 //类是一种用户自定义类型,声明形式: class 类名称 {    public:              公有成员(外部接口)    private:              私有 ...

  8. stm32 堆和栈(stm32 Heap & Stack)

    关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的. 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘: 刚接手STM32时,你只编写一个 int main() { whil ...

  9. MySQL多线程同步-Transfer使用测试

    由淘宝核心系统研发—数据库组开发的MySQL-Transfer,用于解决MySQL主从同步延迟的问题,从MySQL单线程到多线程的工作模式.可以观看@丁奇的相关资料: MySQL多线程同步-Trans ...

  10. Release Management

    1. Understand the current state of release management. test environment limitations how long to setu ...