
本文共 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
类作为基类,包含了name
和age
这两个属性以及一个print
方法。Student
和Teacher
类继承自Person
类,分别添加了自己的属性和方法。运行这个程序可以看到,学生和教师都能正确输出他们的姓名和年龄。
(1)定义格式
从上面的代码可以看出,继承的定义格式如下:
public
、protected
或private
关键字;这个格式非常清晰,直接反映了继承的本质。
(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
继承,因为它提供了最大的灵活性。如果需要控制访问权限,可以选择protected
或private
继承。
注意事项
父类的private成员在子类中是不可访问的,但它们会被继承。例如,父类中的_name
属性如果是private的,子类中不能直接访问,但它们会被继承到子类中。
如果需要子类访问父类的private成员,可以将父类中的成员设置为protected
,这样在子类中就可以使用合适的访问限定符来访问。
在实际开发中,通常不建议使用private
继承,因为这会严重限制子类的灵活性。
通过合理选择继承方式和访问限定符,可以在代码中实现良好的封装和代码的维护性。
发表评论
最新留言
关于作者
