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新增

  • 相关阅读:
    python 如何将md5转为16字节
    linux非root用户执行开机启动程序
    python 正则表达式的使用
    Go随机数的使用
    Go 的类型断言type assertion
    go get中的...
    Go语言圣经
    python入门第三十五天--事件驱动模型(补)练习理解
    MySQL_Ubuntu安装
    JAVA入门基础--数据类型
  • 原文地址:https://www.cnblogs.com/yongpan/p/7551020.html
Copyright © 2011-2022 走看看