1)用于类层结构中基类和子类之间指针或引用的转换。 进行上行转换是安全的。(把子类的指针或引用转换为基类表示) 进行下行转换时,由于没有动态类型检查,所以是不安全的。(把基类指针或引用转换成子类表示) 2)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum,这种转换的安全性也要开发人员来保证。
4. 非virtual继承时,可将基类指针【引用】转成派生类指针【引用】(多继承时,会做偏移处理)。如:Base*转成Derive*、Base&转成Derive&等 dynamic_cast专门用于处理多态机制,对继承体系内的对象(类中必须含有至少一个虚函数)的指针【引用】进行转换,转换时会进行类型检查;vc在编译时要带上/EHsc /GR 如果能转换会...
总结: 1、从子类到基类指针的转换:static_cast和dynamic_cast都是正确地,所谓正确是指方法的调用和数据的访问输出是期望的结果,所谓成功是说转换没有编译错误或者运行异常; 2、从基类到子类:static_cast和dynamic_cast都是正确的,其中static_cast的结果是非空指针,dynamic_cast的结果是空指针; 这里,static_cast是错...
基类指针只允许调用派生类的虚函数,而dynamic_cast运算符生成的指针可以调用非虚函数。 dynamic_cast运算符在类型转换期间不会改变指针的const属性,如果需要强制类型转换的指针是const类型的,则目标指针也必须是const类型的。 动态类型转换的情况分两种: 1.downcast方式:沿着类层次结构,向下进行强制类型转换,从基类的指针...
向上转换,即为子类指针指向父类指针(一般不会出问题);向下转换,即将父类指针转化子类指针。 向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。 在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时...
dynamic_cast(动态转换),允许在运行时刻进行类型转换,从而使程序能够在一个类层次结构安全地转换类型。dynamic_cast 提供了两种转换方式,把基类指针转换成派生类指针,或者把指向基类的左值转换成派生类的引用。17. else else 紧跟在 if 后面,用于对 if 不成立的情况的选择。18. enum enum(枚举)类型,给出...
...一般情况下,你可以使用static_cast用于数字类型的转换,如把枚举转换为int或是 float类型。...进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
如果将子类指针赋给基类指针,基类指针在释放的时候不必考虑调用哪个函数名的析构函数,只需调用成员函数U即可。 成员函数U需要像一般成员函数一样在fun_类名()函数中指定。类的析构函数是由系统调用的,在C中则要显式调用。至于何时调用,要准确判断。
也就是子类B1有一个被改写的虚函数表,子类B2也有一个被改写的虚函数表,而不是子类B1和B2共用一份虚函数表?但是B1和B2有相同的继承自基类的Vptr指针,应该指向同一个虚函数表,也就是共用一份虚函数表?但是如果共用一个虚函数表,假如B1修改了虚函数的第一行,B2也修改了虚函数表的第一行,最终虚函数表第一行...