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继承方式。若没有写继承方式,默认为私有继承。

     

     

  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/yyslif/p/11757651.html
Copyright © 2011-2022 走看看