派生类指针强转基类指针
向上转换简单无门槛,直接通过dynamic_cast转换,见代码示例。
基类指针强转派生类指针
向下转换要求基类得有虚函数,否则编译时会报cannot dynamic_cast ‘qa’ (of type ‘class A’) to type ‘class C’ (source type is not polymorphic) 错误,见代码示例。
代码示例
#include <iostream>
#include <string>
using namespace std;
class A {
public:
A() {};
virtual ~A() {};
public:
void funa() {
cout << "hi Aobj" << endl;
}
};
class B: public A {
public:
B() {};
~B() {};
public:
void funb() {
cout << "hi Bobj" << endl;
}
};
class C: public B {
public:
C() {};
~C() {};
public:
void func() {
cout << "hi Cobj" << endl;
}
};
int main()
{
cout<< "派生类指针强转基类指针 example" <<endl;
C *pc = new C;
/**< 派生类指针强转基类指针 */
A *pa = dynamic_cast<A*> (pc);
B *pb = dynamic_cast<B*> (pc);
pa->funa();
pb->funb();
cout<< "\n基类指针强转派生类指针 example" <<endl;
A *qa = new C;
/**< 基类指针强转派生类指针,注:基类需有虚函数,否则会报错 */
B *qb = dynamic_cast<B*> (qa);
C *qc = dynamic_cast<C*> (qa);
qa->funa();
qb->funb();
qc->func();
}