PS:volatile 提醒编译器它后面所定义的变量随时都可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。而不是优化读取和存储。
static_cast:
static_cast相当于传统的C语言的强制转换,用来**强迫隐式转换**(低级到高级),例如non-const对象转换为const对象。
dynamic_cast:
dynamic_cast主要用于**类层次间**的上行转换和下行转换。
dynamic_cast语句的转换目标是指针类型失败,则结果为0.如果是引用,则dynamic_cast运算符将抛出一个std::bad_cast异常。(typeinfo标准库文件中)
PS:在类层次间进行**上行转换**时,dynamic_cast和static_cast的效果是一样的;在进行**下行转换**时,dynamic_cast具有类型检查的功能,比static_cast更安全。
PS:1.虚函数是重载的另一种表现形式,虚函数允许函数调用与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,即所谓的**动态联编**。2.基类的对象指针可以指向它的公有派生的对象,但是当其指向公有派生类对象,它只能访问派生类中从基类继承来的成员,而不能访问公有派生类中定义的成员。如果设置成虚函数,那么程序在运行时根据指针mp所指向的实际对象,调用该对象的成员函数。只有通过基类指针访问虚函数时才能获得运行的多态性。
const_cast
const_cast,用于修改类型的const或volatile属性。