zoukankan      html  css  js  c++  java
  • 3.2 C++继承方式

    参考: http://www.weixueyuan.net/view/6359.html

     总结:

      子类继承父类,继承方式将限制父类的成员属性在子类中的访问权限,子类访问父类的成员,也需要遵循其成员的访问权限,如 private 修饰的成员只能在当前类中使用,子类不能访问。

      同时父类的成员也是子类的成员,其在子类中的访问权限由父类中的访问权限及继承方式决定。

    3) private继承方式

    • 基类中的所有public成员在派生类中均为private属性;
    • 基类中的所有protected成员在派生类中均为private属性;
    • 基类中的所有private成员在派生类中均不可访问。

    从基类派生出派生类,派生类继承基类的继承方式有三种:public、protected和private。在未指定的情况下编译器会默认继承方式为protected或private方式。

    1) public继承方式

    • 基类中所有public成员在派生类中为public属性;
    • 基类中所有protected成员在派生类中为protected属性;
    • 基类中所有private成员在派生类中不可访问。

    具体示例可以参考上一节中的例1,在此就不再重新举例了。

    2) protected继承方式

    • 基类中的所有public成员在派生类中为protected属性;
    • 基类中的所有protected成员在派生类中为protected属性;
    • 基类中的所有private成员在派生类中仍然不可访问。


    例1:

    enum language{cpp, java, python,javascript, php, ruby};
    
    class book
    {
    public:
        void setprice(double a);
        double getprice()const;
        void settitle(char* a);
        char * gettitle()const;
        void display();
    private:
        double price;
        char * title;
    };
    
    class codingbook: protected book
    {
    public :
        void setlang(language lang);
        language getlang(){return lang;}
    private:
        language lang;
    };


    本类同样使用上一节中的示例,此时继承方式改为了protected继承,我们再来分析一下codingbook中类成员的属性问题,具体见下表。

    codingbook类成员成员属性来源
    price 不可访问 继承自book类
    title 不可访问 继承自book类
    lang private codingbook新增
    setprice protected 继承自book类
    settitle protected 继承自book类
    getprice protected 继承自book类
    gettitle protected 继承自book类
    dispaly protected 继承自book类
    setlang public codingbook新增
    getlang public codingbook新增

    3) private继承方式

    • 基类中的所有public成员在派生类中均为private属性;
    • 基类中的所有protected成员在派生类中均为private属性;
    • 基类中的所有private成员在派生类中均不可访问。


    例2:

    enum language{cpp, java, python,javascript, php, ruby};
    
    class book
    {
    public:
        void setprice(double a);
        double getprice()const;
        void settitle(char* a);
        char * gettitle()const;
        void display();
    private:
        double price;
        char * title;
    };
    
    class codingbook: private book
    {
    public :
        void setlang(language lang);
        language getlang(){return lang;}
    private:
        language lang;
    };

    同样,我们来分析一下本例中的codingbook类中所有成员的成员属性,具体见下表。

    codingbook类成员成员属性来源
    price 不可访问 继承自book类
    title 不可访问 继承自book类
    lang private codingbook新增
    setprice private 继承自book类
    settitle private 继承自book类
    getprice private 继承自book类
    gettitle private 继承自book类
    dispaly private 继承自book类
    setlang public codingbook新增
    getlang public codingbook新增

  • 相关阅读:
    FileUtils功能概述
    java collections
    java的OutOfMemoryError: PermGen space实战剖析
    中华人民共和国知识产权行业标准——表格格式和代码标准 第1部分:表格代码规则
    JVM EXCEPTION_ACCESS_VIOLATION
    【转】Linux tail 命令详解
    【转】XSHELL下直接下载文件到本地(Windows)
    Java与JavaScript之间关于JSON的是非恩怨
    MySQL的Blob类型的手工编辑(manually edit)
    Linux上传下载
  • 原文地址:https://www.cnblogs.com/yongpan/p/7551020.html
Copyright © 2011-2022 走看看