zoukankan      html  css  js  c++  java
  • dynamic_cast<const ObjectList&>(msg);

    说简单的就是C里面的强制类型转换,只不过C++里面为了类型安全而这么做的。主要用于 基类与继承类之间。
    C写多了,类型一般都强转,特别是指针。
    int * a;
    void * b = (void*)a;
    char * c = (char*)b;
    C++里的_cast结尾的还有另外两个,就是干类似活的,据说是为了类型安全,某些条件下会转换失败。
    eg:
    dynamic_cast
    用于多态性的父子类型对象的指针或引用之间。
    class A {
    public:
    virtual ~A (void) {}
    };
    class B : public A {};
    class C : public B {};
    int main (void) {
    B b;
    A* pa = &b;
    cout << "pa = " << pa << endl;
    cout << "---- dynamic_cast ----" << endl;
    // pa实际指向B对象,转换成功
    B* pb = dynamic_cast<B*> (pa);
    cout << "pb = " << pb << endl;
    // pa没有指向C对象,转换失败
    C* pc = dynamic_cast<C*> (pa);
    cout << "pc = " << pc << endl;//这里应该pc=NULL
    }


    子类好比是父类的一个扩展,就像儿子拥有父亲的一些特征一样,当父亲需要输血的时候,同样可以使用儿子的血。

    子类转换为父类是安全的,父类就不能直接转换为子类,因为子类有的东西可能父类没有。

    系统在实现的时候,其实是为每一个类提供了一个方法表,这个表中等级了该类的所有的方法(C++不是全部,仅仅登记是虚拟方法),当对象调用方法是就从这个表中去查找,如果找到就执行,如果没有就到父类查找,以此类推;这样以来,子类就继承了全部的父类的方法;当你将子类对象转换为父类的对象时,那么该对象调用方发誓就只父类方法表开始查找,因此没有办法调用子类的方法;但是对于子类来说,方法依然存在;当你声明回子类时,方法自然就可以使用了。
  • 相关阅读:
    IE下PNG透明图片fadeIn出现黑边的问题
    愿闻其翔记(一)
    简单的日期选择器
    HTML5 贪吃蛇
    HTML5小程序,变化的色彩
    HTML5 Canvas 基本图形画法
    帝国CMS实现一二级导航及其高亮
    php中json_decode()和json_encode()
    JavaScript重复元素处理
    JQuery在光标位置插入内容
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3523299.html
Copyright © 2011-2022 走看看