8-1:C++继承之对继承的理解和继承的基本使用,继承的格式
发布日期:2021-05-06 07:22:47 浏览次数:39 分类:精选文章

本文共 1906 字,大约阅读时间需要 6 分钟。

一:对继承的理解

面向对象编程的三大核心特性是封装、继承和多态。在这些特性中,继承是最为基础和重要的一个。它允许我们在已有的类基础上创建新的类,避免代码重复,同时提高代码的可维护性和扩展性。

在实现一个教务系统时,学生和教师虽然有不同的属性和行为,但他们都具有姓名和年龄等共同的属性和查看教务系统的行为。直接在每个类中重复实现这些功能会导致代码冗余,影响系统的扩展性。因此,我们可以通过继承将这些共同的属性和行为整合到一个基类中,让学生和教师类继承这个基类。

例如,假设我们创建了一个Person类,它包含姓名和年龄这两个属性,以及一个print方法来输出这些信息。学生类和教师类分别继承Person类。学生类可以添加学号和查看作业的行为,教师类可以添加工号和布置作业的行为。通过这种方式,共同的属性和行为得到了复用,继承的过程也就完成了。

二:继承的定义

继承的概念非常简单,就是一个子类继承父类的属性和方法。通过代码实现继承,我们可以更直观地理解这个概念。以下是一个典型的例子:

#include 
#include
using namespace std;
class Person {
public:
void print() {
cout << "姓名: " << _name << endl;
cout << "年龄: " << _age << endl;
}
protected:
string _name = "Job";
int _age = 18;
};
class Student : public Person {
private:
int _StudentID = 2017151025;
};
class Teacher : public Person {
private:
int _TeacherID = 111907;
};
int main() {
Student s1;
Teacher t1;
s1.print();
t1.print();
}

在这个代码中,Person类作为基类,包含了nameage这两个属性以及一个print方法。StudentTeacher类继承自Person类,分别添加了自己的属性和方法。运行这个程序可以看到,学生和教师都能正确输出他们的姓名和年龄。

(1)定义格式

从上面的代码可以看出,继承的定义格式如下:

  • 基类的定义部分;
  • 继承声明,使用publicprotectedprivate关键字;
  • 子类的定义部分。
  • 这个格式非常清晰,直接反映了继承的本质。

    (2)继承方式和访问限定符

    C++中的继承方式和访问限定符决定了子类对父类成员的访问权限。C++提供了三种继承方式和三种访问限定符,组合起来共有9种访问方式。以下是几种常见的组合:

    • public继承,public访问:子类可以访问父类的所有成员;
    • public继承,protected访问:子类可以访问父类的protected成员,但不能直接访问private成员;
    • public继承,private访问:子类只能访问父类的private成员;
    • protected继承,public访问:类似于public继承;
    • protected继承,protected访问:子类可以访问父类的public和protected成员;
    • protected继承,private访问:子类只能访问父类的private成员;
    • private继承,public访问:子类无法访问父类的任何成员;
    • private继承,protected访问:同样无法访问父类成员;
    • private继承,private访问:子类可以访问父类的private成员。

    在实际开发中,通常会选择public继承,因为它提供了最大的灵活性。如果需要控制访问权限,可以选择protectedprivate继承。

    注意事项

  • 父类的private成员在子类中是不可访问的,但它们会被继承。例如,父类中的_name属性如果是private的,子类中不能直接访问,但它们会被继承到子类中。

  • 如果需要子类访问父类的private成员,可以将父类中的成员设置为protected,这样在子类中就可以使用合适的访问限定符来访问。

  • 在实际开发中,通常不建议使用private继承,因为这会严重限制子类的灵活性。

  • 通过合理选择继承方式和访问限定符,可以在代码中实现良好的封装和代码的维护性。

    上一篇:8-2:C++继承之父类和子类对象赋值转换(公有继承)也即切片
    下一篇:8-5:C++继承之多继承,菱形继承,虚继承,虚基表,继承和组合

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月03日 03时37分04秒