zoukankan      html  css  js  c++  java
  • C++继承与派生的概念、什么是继承和派生

    在C++中可重用性是通过继承(inheritance)这一机制来实现的。因此,继承是C++的一个重要组成部分。

    前面介绍了类,一个类中包含了若干数据成员和成员函数。在不同的类中,数据成员和成员函数是不相同的。但有时两个类的内容基本相同或有一部分相同,例如巳声明了学生基本数据的类Student:

    1. class Student
    2. {
    3. public:
    4. void display( ) //对成员函数display的定义
    5. {
    6. cout<<"num: " <<num<<endl;
    7. cout<<"name: "<< name <<endl;
    8. cout <<"sex: "<<sex<<endl;
    9. }
    10. private:
    11. int num;
    12. string name;
    13. char sex;
    14. };

    如果学校的某一部门除了需要用到学号、姓名、性别以外,还需要用到年龄、地址等信息。当然可以重新声明另一个类class Student1:

    1. class Student1
    2. {
    3. public:
    4. void display( ) //此行原来已有
    5. {
    6. cout<<"num: " <<num<<endl; //此行原来已有
    7. cout<<"name: "<< name <<endl; //此行原来已有
    8. cout <<"sex: "<<sex<<endl; //此行原来已有
    9. cout <<"age: "<<age<<endl;
    10. cout <<"address: "<<addr<<endl;
    11. }
    12. private:
    13. int num; //此行原来已有
    14. string name; //此行原来已有
    15. char sex; //此行原来已有
    16. int age;
    17. char addr[20];
    18. };

    可以看到有相当一部分是原来已经有的,可以利用原来声明的类Student作为基础,再加上新的内容即可,以减少重复的工作量。C++提供的继承机制就是为了解决这个问题。

    在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类(base class)”或“父类(father class)”,新建的类称为“派生类(derived class)”或“子类(son class )”。

    一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。通过继承,一个新建子类从已有的父类那里获得父类的特性。从另一角度说,从已有的类(父类)产生一个新的子类,称为类的派生。类的继承是用已有的类来建立专用类的编程技术。派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整。一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的派生类,因此基类和派生类是相对而言的。一代一代地派生下去,就形成类的继承层次结构。相当于一个大的家族,有许多分支,所有的子孙后代都继承了祖辈的基本特征,同时又有区别和发展。与之相仿,类的每一次派生,都继承了其基类的基本特征,同时又根据需要调整和扩充原 有的特征。

    以上介绍的是最简单的情况:一个派生类只从一个基类派生,这称为单继承(single inheritance),这种继承关系所形成的层次是一个树形结构,如图11.3所示。


    图 11.3


    一个派生类不仅可以从一个基类派生,也可以从多个基类派生。也就是说,一个派生类可以有一个或者多个基类。一个派生类有两个或多个基类的称为多重继承(multiple inheritance)。关于基类和派生类的关系,可以表述为派生类是基类的具体化,而基类则是派生类的抽象。

  • 相关阅读:
    Python垃圾回收机制 总结
    求二叉树中任意两个结点的距离
    Python 实现排序算法
    InnoDB 索引原理
    Linux常用脚本命令总结
    How Django works?
    RabbitMQ 知识总结
    最短路径之Dijkstra算法和Floyd-Warshall算法
    最小生成树之Prim算法和Kruskal算法
    Python collections模块总结
  • 原文地址:https://www.cnblogs.com/skl374199080/p/4142762.html
Copyright © 2011-2022 走看看