zoukankan      html  css  js  c++  java
  • 3.1 C++继承的概念及语法

     参考:http://www.weixueyuan.net/view/6358.html、

    总结:

       继承可以理解为一个类从另一个类获取方法(函数)和属性(成员变量)的过程。

      被继承的类称为父类或基类,继承的类称为子类或派生类。

      由于派生类可以将基类的代码继承过来,无需重新设计,因而继承解决了代码重用的问题,大大提高了软件的开发效率  

      采用公用继承方式,则基类的公有成员变量和成员函数的属性继承到派生类后不发生变化。

      如果在继承过程中不指名继承方式时,编译器系统会默认继承方式为private或protected属性。

      虽然我们可以继承到book类的私有成员,但是book类的私有成员变量在派生类中我们是无法直接访问的,只能通过间接的方式访问。

    -----------------------------------

    继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。

    继承可以理解为一个类从另一个类获取方法(函数)和属性(成员变量)的过程。如果类B继承于类A,那么B就拥有A的方法和属性。被继承的类称为父类或基类,继承的类称为子类或派生类。

    在上一章中我们例举了不少book类相关的示例,book类中有两个成员变量:title和price,即书的名字和价格。如果此时我们要按照编程语言将这些书进行分类,此时我们需要第三个成员变量language,这个时候我们没有必要重新设计一个全新的类,只需要在book类的基础上加上language属性及其相关的方法即可。

    此时就可以将我们需要的codingbook类继承book类就可以得到book类的成员变量及成员函数,继承后在添加需要的language属性和相关的方法。新类codingbook叫做book类的派生类或子类,而原有的book类则称为基类。派生类codingbook除了能够拥有基类book的所有数据成员和成员函数之外,还可以拥有基类没有的language成员变量及其相关成员函数。

    由于派生类可以将基类的代码继承过来,无需重新设计,因而继承解决了代码重用的问题,大大提高了软件的开发效率。同时如果这些代码在基类中运行无误,则继承之后到派生类中运行也是不会有问题的。

    继承并非只能进行一层,可以是任意层次的。比如codingbook继承自book类,如果我们需要对codingbook类继续添加某一新属性时,同样可以设计一个类继承自codingbook类。

    从book类中派生出codingbook类的语法如下例所示。

    例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: public book
    {
    public :
        void setlang(language lang);
        language getlang(){return lang;}
    private:
        language lang;
    };

    为了方便起见,我们先在类定义前声明了一个全局的枚举类型language,用于表示编程语言。book类我们已经很熟悉了,关键是codingbook类的定义。在定义codingbook类时多出了“: public book”,除此之外codingbook类的定义和上一章介绍的类定义方法没有什么差别。其中关键字public指明继承方式属于公有继承,book为被继承的类名。采用公用继承方式,则基类的公有成员变量和成员函数的属性继承到派生类后不发生变化。例如book类的公有的setprice和settitle成员函数继承到codingbook类后,这两个成员变量的属性仍将是public属性。如果在继承过程中不指名继承方式时,编译器系统会默认继承方式为private或protected属性。

    在本例中因为已经定义过一个book类,具有book类的基本属性:书名和书的价格。现在需要一个新的类codingbook来描述编程类书籍,为此我们继承book类中的所有成员及成员函数,并新增language属性及相应的操作函数。虽然我们可以继承到book类的私有成员,但是book类的私有成员变量在派生类中我们是无法直接访问的,只能通过间接的方式访问。间接访问则是通过getprice、gettitle、setprice和settitle函数来实现的,因为这些函数在派生类中是public属性的。如下表所示为codingbook类中的所有成员的一览。

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

      

      

  • 相关阅读:
    【证明】—— 二叉树的相关证明
    ubuntu编译安装opencv
    【换句话说】【等价描述】—— 定义及概念的不同描述
    YOLOv3训练自己的数据
    【证明】【一题多解】布尔不等式(union bound)的证明
    机器视觉:MobileNet 和 ShuffleNet
    keras图像风格迁移
    【算法导论】【排序】—— 计数排序(counting sort)
    【等价转换】—— min/max 的转换与互相转换
    卷积神经网络特征图可视化(自定义网络和VGG网络)
  • 原文地址:https://www.cnblogs.com/yongpan/p/7544555.html
Copyright © 2011-2022 走看看