dynamic_cast主要用于类层次结构中父类和子类之间指针和引用的转换,由于具有运行时类型检查,因此可以保证下行转换的安全性,何为安全性?即转换成功就返回转换后的正确类型指针,如果转换失败,则返回NULL,之所以说static_cast在下行转换时不安全,是因为即使转换失败,它也不返回NULL。 dynamic_cast转换方式主要有三种: dynami...
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast 更安全。 msdn官方解释:http://msdn.microsoft.com/en-us/library/cby9kycs(v=vs.80).aspx 举例:下行转换(把基类的指针或引用转换成子类表示) 需要注意的是如果基类中不含虚函数,dynamic_cast 下行转换编译会出错 1 #include<iostream> 2 usin...
因为static_cast的转换时粗暴的,它仅根据类型转换语句中提供的信息(尖括号中的类型)来进行转换,这种转换方式对于上行转换,由于子类总是包含父类的所有数据成员和函数成员,因此从子类转换到父类的指针对象可以没有任何顾虑的访问其(指父类)的成员。 而对于下行转换为什么不安全,是因为static_cast只是在编译时进行类型检...
隐式转换一 使用单参数的构造函数或N个参数中有N-1个是默认参数的构造函数,如: class A { public: A(stirng s); A(string s,int a = 0); }; class String { public: String ( const char* p ); // 用C风格的字符串p作为初始化值
dynamic_cast是动态转换,会在运行期借助 RTTI 进行类型转换(这就要求基类必须包含虚函数),主要用于类层次间的下行转换(即基类指针或引用转换成子类表示)。对于指针,如果转换失败将返回 NULL;对于引用,如果转换失败将抛出 std::bad_cast 异常。 代码语言:javascript ...
用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子...
这个就是下行转换,从基类指针转换到派生类指针。 在《More effective C++》里面看见一个很好的例子,也补充在这里 //定义classWidget{};classSpecialWidget:publicWidget{};voidupdate(SpecialWidget*psw);Widget*pw;...//如果pw所指的是SpecialWidget ,那么就传递过去;如果pw指的是Widget ,//那么传递过去的值是null...
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 另外要注意: 基类要有虚函数,否则会编译出错;static_cast则没有这个限制。 这是由于运行...
指针类型之间的转换:将一个指向派生类对象的基类指针转换为派生类指针(下行转换),或者将 void* 指针转换为具体类型的指针。~~~class Base {};class Derived : public Base {};Base* basePtr = new Derived();Derived* derivedPtr = static_cast<Derived*>(basePtr); // 基类指针转换为派生类指针 4楼2024...