关于基类与派生类指针的转换问题

派生类指针强转基类指针

向上转换简单无门槛,直接通过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();
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容