zoukankan      html  css  js  c++  java
  • C++中对C的扩展学习新增内容———面向对象(继承)

    面向对象(继承)

    1、继承的作用

    (1) 减少冗余代码

    使用继承之前:

    class IndexPage
    {
    public:
        void header()
        {
            cout << "显示头部" << endl;
        }
    
        void footer()
        {
            cout << "显示底部" << endl;
        }
    
        void body()
        {
            cout << "显示首页的主体内容" << endl;
        }
    };
    
    
    class NewsPage
    {
    public:
        void header()
        {
            cout << "显示头部" << endl;
        }
    
        void footer()
        {
            cout << "显示底部" << endl;
        }
    
        void body()
        {
            cout << "显示新闻的主体内容" << endl;
        }
    };
    
    class ProductPage
    {
    public:
        void header()
        {
            cout << "显示头部" << endl;
        }
    
        void footer()
        {
            cout << "显示底部" << endl;
        }
    
        void body()
        {
            cout << "显示产品页面的主体内容" << endl;
        }
    };

    使用继承之后:

    // 公共的函数或者数据
    class CommonPage
    {
    public:
        void header()
        {
            cout << "新式的显示头部" << endl;
        }
    
        void footer()
        {
            cout << "新式的显示底部" << endl;
        }
    };
    
    
    // IndexPage 子类(派生类)  CommonPage 父类(基类)
    // 继承发生时,子类会继承父类的函数、变量
    class IndexPage : public CommonPage
    {
    public:
        void body()
        {
            cout << "显示首页的主体内容" << endl;
        }
    };
    
    
    class NewsPage : public CommonPage
    {
    public:
        void body()
        {
            cout << "显示新闻的主体内容" << endl;
        }
    };
    
    class ProductPage : public CommonPage
    {
    public:
        void body()
        {
            cout << "显示产品页面的主体内容" << endl;
        }
    };
    
    
    void test01()
    {
        // 1. 减少冗余代码,复用代码
        IndexPage index;
        index.header();
        index.body();
        index.footer();
    
        NewsPage news;
        news.header();
        news.body();
        news.footer();
    
        ProductPage product;
        product.header();
        product.body();
        product.footer();
    }

    (2) 扩展类

    (3) 修改类

    // 2. 可以修改已有类的功能,而不需要修改源代码
    class MyFunctions
    {
    public:
        void function01()
        {
            cout << "功能01" << endl;
        }
    
        void function02()
        {
            cout << "功能02" << endl;
        }
    };
    
    // 如果一个类内部的函数,不满足我们的需要,需要修改该函数的功能。
    // 1. 修改源代码  2. 既要修改功能,又不能修改源代码。(开闭原则:扩展功能可以通过增加代码完成,而不是修改源代码)
    
    class NewFunction : public MyFunctions
    {
    public:
        void function02()
        {
            cout << "新修改的功能02" << endl;
        }
    };
    
    void test02()
    {
        NewFunction nf;
        nf.function01();
        nf.function02();
    }
    
    
    class NewFunctionEx : public MyFunctions
    {
    public:
        void function03()
        {
            cout << "功能03" << endl;
        }
    };
    // // 3. 继承扩展类的功能
    void test03()
    {
        NewFunctionEx nf;
        nf.function01();
        nf.function02();
        nf.function03();
    }

    2、继承中的权限

    继承中同样会有privatepublicprotected三种权限:

    (1)Private 类外不能访问,子类中同样也不能访问。

    (2)Public 类外可以访问,子类也可以访问。

    (3)Protected类外不可以访问,子类可以访问、

    扩展理解:子类能不能访问,比如子类能不能继承该权限的成员?

    Pulicprotected权限的成员,子类才可以继承。而类内内部成员的权限决定了,子类能否继承该权限。

     

    3、继承方式

     

    继承方式决定了被继承下来的成员在子类中是什么权限:

     

    (1)、如果是Public继承方式,成员在父类中是什么权限,在子类中仍然是什么权限。

     

    (2)、如果是private继承方式,成员在父类中无论是什么权限,在子类中会全部变成私有权限。

     

    (3)、如果是protected继承方式,会根据父类中成员的权限来继承,如果成员在父类中是public,在子类变成protected,如果原来就是protected,那么到子类就不改变,依然是protected

     

     

    如果没有特殊需求,我们就使用public继承方式。若没有写继承方式,默认为私有继承。

     

     

  • 相关阅读:
    【译】StackExchange.Redis 中文文档(十)性能分析
    【译】StackExchange.Redis 中文文档(九)服务器相关命令
    【译】StackExchange.Redis 中文文档(八)流
    【译】StackExchange.Redis 中文文档(七)推送/订阅消息顺序
    【译】StackExchange.Redis 中文文档(六)事件
    【译】StackExchange.Redis 中文文档(五)事务
    查看供应商2086报表
    创建内部供应商
    创建客户前台配置
    创建客户后台配置-spro
  • 原文地址:https://www.cnblogs.com/yyslif/p/11757651.html
Copyright © 2011-2022 走看看