• 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() 找不到再到父类找,如果在子类找到了就使用了。。。

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

  • 相关阅读:
    nvidia显卡驱动问题 MKY
    记一次阿里云硬盘LVM的扩容
    大佬的ELK优化总结
    Spring boot使用Javax.validation和ControllerAdvice来进行参数校验
    esbuild 学习(1)
    git push、git pull 需要输入用户名和密码
    redis 发布订阅
    .NET Core使用RabbitMQ
    Nginx配置Https(详细、完整)
    dotnetcore 在线源码
  • 原文地址:https://www.cnblogs.com/pangblog/p/3327475.html
Copyright © 2020-2023  润新知