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

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

  • 相关阅读:
    android--jenkins+gradle+android自动化构建apk步骤(转)
    Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
    使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)
    Jenkins(二) 安装、新建Jobs与删除及SVN配置(转)
    Oracle中merge into的使用 (转)
    MyEclipse新建Web Project报错
    HTML5----input-datalist输入框自己主动提示功能
    socket通信简单介绍
    一步一步写算法(之hash表)
    IE8下div中2个button仅仅显示一个
  • 原文地址:https://www.cnblogs.com/pangblog/p/3327475.html
Copyright © 2020-2023  润新知