zoukankan      html  css  js  c++  java
  • 向上强制转换和向下强制转换

    在C++的继承中,基类和派生类的指针,引用的题目我们都见的很多。前面我也总结过基类指针和派生类指针调用函数的机制。

    将派生类引用或指针转换为基类引用或指针被称为向上强制转换(upcasting)即基类指针指向了派生类对象,或者将派生类对象强制转换成了基类指针指向了

    class Base
    {
    public:
        int b;
    };
    class Derive:public Base
    {
    public:
        int d;
    };
    int main()
    {
        Base b;
        Derive d;
        Base *pb = &d;//向上强制转换
        pb->b = 1;  //可以赋值
        cout << "Base::b = " << pb->b << endl;
        return 0;
    }

    与向上强制转换相反,将基类指针或引用转换为派生类指针或引用成为向下强制转换。 
      如果不使用显示类型转换,向下强制转换是不允许的,因为is-a关系是不可逆的。 
      比如香蕉是水果,但是水果不是香蕉。 
      派生类香蕉可以新增数据成员,因此这些数据成员不能应用于基类水果,比如香蕉中有黄色,但是不是所有水果都是黄色的。

    class Fruit
    {
    public:
        int weight;
    };
    class Banana:public Fruit
    {
    public:
        int yellow;
    };
    int main()
    {
        Fruit b;
        Banana d;
        Banana *pb = &b;//隐式向下强制转换
        //报错
        Banana *p = (Banana*)&b;//显式类型转换,不会报错
        return 0;
    }
  • 相关阅读:
    Window 下配置ChromeDriver(简单4步完成)[转]
    selenium之 chromedriver与chrome版本映射表(更新至v2.46)[转]
    学习网站
    如何理解python中的类和方法(转)
    面试题整理20191127
    mysql 慢查询
    python学习--代码组织实例
    ubuntu下安装Matlab
    SkinPP for VC
    C++中的4个类型转换关键字
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9277663.html
Copyright © 2011-2022 走看看