• c++基础 之 面向对象特征一 : 继承


    class Base
    {
    public:
    void f()
    {
    cout<<"void f()"<<endl<<endl;
    }
    void f(int i)
    {
    cout<<"void f(int)"<<endl<<endl;
    }
    void h()
    {
    cout<<"void h()"<<endl<<endl;
    }
    void g(char s)
    {
    cout<<"void g(char)"<<endl<<endl;
    }
    protected:
    private:
    };


    class Devie1 : public Base
    {
    public:
    void h() // 重定义 覆盖父类的h()
    {
    cout<<"Devie1 void h()"<<endl<<endl;
    }

    protected:
    private:
    };


    class Devie2 : public Base
    {
    public:
    void f()// 重定义 覆盖了父类的所有重载函数 f() f(int a)
    {
    cout<<"Devie2 void f()"<<endl<<endl;
    }
    void g() // 隐藏 父类的 g(char s)
    {
    cout<<"Devie2 void g()"<<endl<<endl;
    }
    protected:
    private:

    };

    int _tmain(int argc, _TCHAR* argv[])
    {
    Base b;
    b.f();
    b.f(2);
    b.g('3');
    b.h();


    Devie1 d1;
    d1.f(1);//继承
    d1.f();//继承
    d1.g('1');//继承
    d1.h();//覆盖


    Devie2 d2;
    d2.f();//覆盖 
    //找不到Base::f(int) 被隐藏  覆盖父类的 f() 
    d2.g();//隐藏
    //找不到父类的Base::g(char s) 被隐藏
    d2.h();//继承
    //可以看出,若子类没有重定义父类的操作,子类会调用父类的函数。
    //如果子类重定义,分两种情况:
    //1.子类重定义父类的函数,返回值和参数列表一致,此为 覆盖  override
    //子类和基类一样可以发相同的消息,但是子类表现出不同于父类的行为。。。。
    //2.子类重定义了父类的成员函数,但是修改了返回值或者参数列表,此为隐藏 name hiding 
    //子类重定义父类的重载函数 时 将导致该函数的所有版本在子类中被自动隐藏。。。
    //d1.f()先在子类找f() 找不到再到父类找,如果在子类找到了就使用了。。。

    //替代原则:向上类型转换
    //在任何需要基类对象(指针)的地方,都可以用子类的对象(指针)来代替








    return 0;
    }

    //可以看出,若子类没有重定义父类的操作,子类会调用父类的函数。
    //如果子类重定义,分两种情况:
    //1.子类重定义父类的函数,返回值和参数列表一致,此为 覆盖  override
    //子类和基类一样可以发相同的消息,但是子类表现出不同于父类的行为。。。。
    //2.子类重定义了父类的成员函数,但是修改了返回值或者参数列表,此为隐藏 name hiding 
    //子类重定义父类的重载函数 时 将导致该函数的所有版本在子类中被自动隐藏。。。
    //d1.f()先在子类找f() 找不到再到父类找,如果在子类找到了就使用了。。。

    //替代原则:向上类型转换
    //在任何需要基类对象(指针)的地方,都可以用子类的对象(指针)来代替

  • 相关阅读:
    1.17 想学好Linux,这些习惯必须养成(初学者必读)
    1.16 Linux该如何学习(新手入门必看)
    2.3 为什么建议使用虚拟机来安装Linux?
    2.1 安装Linux系统对硬件有什么要求?
    2.5 使用U盘安装Linux系统
    Expenditure Reduction ( DP )
    My University Is Better Than Yours (建图 + tj去环缩点 + 拓扑序 )
    profession computing week1
    【笔记记录】【敏感信息已混淆】k8s生态下 kubectl命令、pod性能验证及监控
    selenium 显示等待封装
  • 原文地址:https://www.cnblogs.com/pangblog/p/3327475.html
Copyright © 2020-2023  润新知