zoukankan      html  css  js  c++  java
  • 类型兼容---子类的对象可以给父类指针赋值

    一个公有派生类的对象在使用上可以被当做基类的对象,反之禁止。

    也就是说:1.派生类的对象可以赋值给基类的对象

    如 

    B:public A    
    A a;
    B b;
    a = b;//语法上是允许的

    2、派生类的对象可以初始化基类的引用:

    void f(A &a)
    {}
    
    int main()
    {
    B b;
    f(b);
    }

    3、指向基类的指针可以指向派生类

    A *p;
    p = new B();

    例子:

    #include <iostream>
    using namespace std;
    
    class B0    //基类B0声明
    { public:
        void display(){cout<<"B0::display()"<<endl;}    //公有成员函数
    };
    class B1: public B0    
    {
     public:
        void display(){cout<<"B1::display()"<<endl;}    
    };
    class D1: public B1    
    {
    public:
        void display(){cout<<"D1::display()"<<endl;}    
    };
    void fun(B0 *ptr)    
    {    ptr->display();    //"对象指针->成员名"  
    }
    int main()    //主函数
    {    B0 b0;    //声明B0类对象
        B1 b1;    //声明B1类对象
        D1 d1;    //声明D1类对象
        B0 *p;    //声明B0类指针
        p=&b0;    //B0类指针指向B0类对象
        fun(p);
        p=&b1;    //B0类指针指向B1类对象
        fun(p);
        p=&d1;    //B0类指针指向D1类对象
        fun(p);
    }
    结果:
    B0::display()
    B0::display()
    B0::display()
    
    注意:尽管是将派生的对象赋值给了基类的指针,但全部调用的基类的函数,因为在子类中的同名函数会被基类同名函数覆盖。
  • 相关阅读:
    Java学习小记 5
    Java学习小记 4
    Java学习小记 3
    Java学习小记 2
    Java学习小记 1
    ThreadLocal详解
    jvm之java类加载机制和类加载器(ClassLoader)的详解
    什么情况下JVM内存中的一个对象会被垃圾回收?
    java线程池的拒绝策略
    logback配置文件---logback.xml详解
  • 原文地址:https://www.cnblogs.com/defen/p/5344834.html
Copyright © 2011-2022 走看看