三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

2026/6/4 继承与多态

2026/6/4 继承与多态

一、继承

为什么要继承?

比如你要写老师和学生两个类,他们都有名字、生日等信息,也都有吃饭、睡觉等行为。
那么如果分开定义,不仅麻烦,想要修改的时候也只能挨个修改,效率很低。

那么有什么简单的方法吗?有的兄弟有的,那就是继承。

我们可以创造一个父类(基类),里面装着这些对象的共同点,这时候我们创造对象,直接在这个父类的基础上创建即可,想要修改也直接修改父类即可,十分方便。

继承的代码实现

首先创造一个父类:

// 父类:人(所有人类的公共属性和方法)
class Person
{
public:// 公共属性std::string name;int age;// 公共方法void eat() { std::cout << name << "在吃饭\n"; }void sleep() { std::cout << name << "在睡觉\n"; }// 父类构造函数Person(std::string n, int a) : name(n), age(a) {}
};

然后在父类的基础上创建子类,语法为 class 子类名 : public 父类名

// 子类:学生,继承自Person
class Student : public Person
{
public:// 学生独有的属性int studentId;// 学生独有的方法void study() { std::cout << name << "在上课\n"; }// 子类构造函数:必须先调用父类构造!Student(std::string n, int a, int id) : Person(n, a), studentId(id) {}
};// 子类:老师,继承自Person
class Teacher : public Person
{
public:std::string subject;void teach() { std::cout << name << "在讲" << subject << "\n"; }Teacher(std::string n, int a, std::string s) : Person(n, a), subject(s) {}
};

使用时直接当作正常的对象使用即可:

int main()
{Student s("小明", 18, 2024001);Teacher t("王老师", 35, "数学");// 子类自动拥有父类的所有方法!s.eat();    // 小明在吃饭s.sleep();  // 小明在睡觉s.study();  // 小明在上课(自己的方法)t.eat();    // 王老师在吃饭t.sleep();  // 王老师在睡觉t.teach();  // 王老师在讲数学(自己的方法)
}
← 返回列表