c++中的继承与派生使用详解

 更新时间:2025年10月14日 08:59:59   作者:帅气小胖子  
C++中的继承与派生概念,解释了继承是类之间的成员变量和函数的获取过程,派生即继承的另一角度表述,介绍了基类和派生类的定义,并分析了在C++中继承的三种方式:public、protected、private,以及它们对成员访问权限的影响

1、继承与派生是C++的核心概念

首先需明确,继承和派生是class之间,以及基于class生成的实例之间的包含与被包含关系,至于为什么不认为是数学中集合与子集来形容,因为概念上还是存在一些区别的。

2、什么是继承与派生

继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。 

在C++中,派生(Derive和继承是一个概念,只是站的角度不同。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。 

被继承的类称为父类或基类,继承的类称为子类或派生类。“子类”和“父类”通常放在一起称呼,“基类”和“派生类”通常放在一起称呼。 

派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。

3、c++中继承与派生的作用

最常见的我们校园网管理系统,首先大致可以分为以下几种类型,学生,老师。学生再细分,可以分为专科,本科,硕士,博士。

老师也可以分为,讲师,副教授,教授,此外还有不教授学科,专门做管理和后勤方面的老师。

我们校园网系统中,需要录入所有这些人的信息。此时如果我们为每一种类型群体单独建立一个class,其实也可以实现,但是思考以下问题:

(1)所有人是否都需要一些基础属性,如年龄,姓名

(2)如果每一类人群,单独写一个对应的class,是否每一个class中都要定义一个一次年龄和姓名成员变量。这样就会照成代码的臃肿。

对于以上问题,故我们提出了继承的概念,现在我们定义一个名为people的class,里面定义了最为基础的性质,后续学生类型的class,老师类型的class,都继承这个基础people,就可以使得代码结构优化。

3.1 实际代码中说明

接着上段来思考,此时我们需要定义学生的class,基于继承people,此时我们还要为学生添加一些信息,如学生的成绩,文科,理科,或工科生,学生年级,属于那个学院。

闲话少说,先看代码:

class People{
public:
    void setname(char *name);
    void setage(int age);
    char *getname();
    int getage();
private:
    char *m_name;
    int m_age;
};
void People::setname(char *name){ m_name = name; }
void People::setage(int age){ m_age = age; }
char* People::getname(){ return m_name; }
int People::getage(){ return m_age;}
//派生类 Student
class Student: public People{
public:
    void setscore(float score);
    float getscore();
private:
    float m_score;
};
void Student::setscore(float score){ m_score = score; }
float Student::getscore(){ return m_score; }

class Student: public People;此语句是定义了Student继承了,people。

详细拆解如下:先同普通class定义一样。先写class Student,然后后+一个“:”即单个封号,封号后+一个继承类型的定义(一共有3种继承方式,后文详细说明),继承方式说明后,+被继承的class名称写上,最后不要忘记“;”构成一个完整的语句。

3.2 继承类型的详细说明

public、protected、private 指定继承方式,这3种关键字不仅仅只可以修饰成员变量,还可以修饰继承的类型,这一点需切记。

以下是详细的解释:

1) public继承方式

  • 基类中所有 public 成员在派生类中为 public 属性;
  • 基类中所有 protected 成员在派生类中为 protected 属性;
  • 基类中所有 private 成员在派生类中不能使用。

2) protected继承方式

  • 基类中的所有 public 成员在派生类中为 protected 属性;
  • 基类中的所有 protected 成员在派生类中为 protected 属性;
  • 基类中的所有 private 成员在派生类中不能使用。

3) private继承方式

  • 基类中的所有 public 成员在派生类中均为 private 属性;
  • 基类中的所有 protected 成员在派生类中均为 private 属性;
  • 基类中的所有 private 成员在派生类中不能使用。
基类成员在基类中的属性public 继承protected 继承private 继承
publicpublicprotectedprivate
protectedprotectedprotectedprivate
private不可访问不可访问不可访问

记忆口诀(简短好记)

“继承方式是天花板,成员权限不上升”

解释:

  • 继承方式(public /protected/private)决定了派生类中成员的最高访问权限(天花板)。
  • 基类成员在派生类中的访问权限 = min (基类原权限,继承方式权限)(取更严格的那个)。
  • 无论哪种继承方式,基类 private 成员始终不可访问
  • protected 成员和 private 成员类似,也不能通过对象访问。但是当存在继承关系时,protected 和 private 就不一样了:基类中的 protected 成员可以在派生类中使用,而基类中的 private 成员不能在派生类中使用,下面是详细讲解。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • C++之unordered封装的实现

    C++之unordered封装的实现

    本文主要介绍了C++之unordered封装的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • c++动态库调用的实现

    c++动态库调用的实现

    本文主要介绍了c++动态库调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C++实现线性表链式存储(单链)

    C++实现线性表链式存储(单链)

    这篇文章主要为大家详细介绍了C++实现线性表链式存储,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • OpenCV实现车牌定位(C++)

    OpenCV实现车牌定位(C++)

    这篇文章主要为大家详细介绍了OpenCV实现车牌定位,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 一起来学习C++的函数指针和函数对象

    一起来学习C++的函数指针和函数对象

    这篇文章主要为大家详细介绍了C++函数指针和函数对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C语言实现QQ窗口抖动功能

    C语言实现QQ窗口抖动功能

    这篇文章主要为大家详细介绍了C语言实现QQ窗口抖动功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C语言实现简单的通讯录

    C语言实现简单的通讯录

    这篇文章主要为大家详细介绍了C语言实现简单的通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • C++11中std::move、std::forward、左右值引用、移动构造函数的测试问题

    C++11中std::move、std::forward、左右值引用、移动构造函数的测试问题

    这篇文章主要介绍了C++11中std::move、std::forward、左右值引用、移动构造函数的测试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • C语言实现分治法实例

    C语言实现分治法实例

    这篇文章主要为大家详细介绍了C语言实现分治法的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • C语言双指针多方法旋转数组解题LeetCode

    C语言双指针多方法旋转数组解题LeetCode

    这篇文章主要为大家介绍了C语言双指针使用多方法旋转数组题解LeetCode,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02

最新评论