美文网首页
关于基类与派生类指针的转换问题

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

作者: github_lincy | 来源:发表于2019-06-14 21:00 被阅读0次

派生类指针强转基类指针

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

相关文章

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

    派生类指针强转基类指针 向上转换简单无门槛,直接通过dynamic_cast转换,见代码示例。 基类指针强转派生类...

  • dynamic_cast运算符

    将基类的指针或引用,安全的转换成派生类的指针和引用

  • C#——访问基类的成员

    1.基类与派生类之间的转换C#允许派生类转换为基类,但不允许把基类转换为派生类。这样,一个基类的对象即可以指向基类...

  • 4.5dynamic_cast操作符

    向上转型:指用派生类指针指向基类对象 向下转型:指将基类指针指向派生类对象 向下转型不会有任何问题,而向上转型默认...

  • 10 多态 抽象

    /*多态本质:c++ 允许将派生类对象的地址赋予基类的指针所有派生类的本质都是is a 的基类基类的指针调用任何方...

  • java中基类指针只向派生类对象的四种方法

    总结: 1.基类指针指向基类对象:简单,只需通过基类指针简单的调用基类的功能。 2.派生类指针只想基类对象:同上。...

  • 第五章 继承与多态

    学习目的 掌握派生类的定义和使用; 掌握派生类构造与析构函数的定义; 掌握重写基类的成员函数; 掌握通过基类指针或...

  • 3.0 C++远征:is a

    4-4is_a 0.派生类Soldier继承自基类Person 1.派生类可以给基类赋值: 2.基类指针可以指向派...

  • C++ 派生类对象转换成基类对象

    /* class_protect.class */ /* 基类转换派生类问题:(不安全的转换) 既然转换了那就是指...

  • C++重新理解虚函数

    1. 虚函数的定义 允许派生类重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类或派生类的同名函数 1...

网友评论

      本文标题:关于基类与派生类指针的转换问题

      本文链接:https://www.haomeiwen.com/subject/fijmfctx.html