-
4 votesanswersviews
虚拟基础到非多态类型的派生强制转换
从基础到派生的转换需要通过 static_cast 或 dynamic_cast 进行显式转换 . 当基数是虚拟的时,只适用后者 . 此外, dynamic_cast 只能用于多态类型 . 总之,两者似乎表明,由于涉及的类型不是多态的,因此将虚拟基数转换为派生实际上是不可能的 . 这是真的? -
7 votesanswersviews
从基指针向模板化派生类型的向下转换
我有以下层次结构: class base { public: virtual ~base(){} virtual void foo() {} }; template <typename T> class derived1 : public base { virtual void foo() {}; }; template <typename T> cl... -
3 votesanswersviews
动态转换为非派生对象以调用函数有效吗?
我在C书中读到,如果它指向的对象实际上是派生类型的对象,则可以使用dynamic_cast将指向基础对象的指针向下转换为派生对象指针 . 格式为 dynamic_cast<Derived*>(basePointer) . 此外,我在这个网站上读到,如果指向的对象无法转换为派生类类型,则dynamic_cast应返回空指针 . 但是,我最近尝试使用指向普通对象的指针,将虚函数向下转换为... -
3 votesanswersviews
为什么dynamic_cast可以用于非多态类型的upcast?
见here: dynamic_cast只能用于指针和对类的引用(或使用void *) . 其目的是确保类型转换的结果指向目标指针类型的有效完整对象 . 这自然包括指针upcast(从指针到派生到指针到base的转换),与隐式转换允许的方式相同 . 但是,如果指向对象是目标类型的有效完整对象,则dynamic_cast也可以向下转换(从指针到基础转换为指向派生的)多态类(具有虚拟成员的类) . ... -
1 votesanswersviews
使用static_cast,dynamic_cast或显式转换导出指向Base指针的指针不会调用基函数
我有以下代码 . #include <iostream> using namespace std; class Base { public: virtual int f(){cout<<"Base"<<endl;} }; class Derived:public Base { public: int f(){cout&l...