一、继承
为什么要继承?
比如你要写老师和学生两个类,他们都有名字、生日等信息,也都有吃饭、睡觉等行为。
那么如果分开定义,不仅麻烦,想要修改的时候也只能挨个修改,效率很低。
那么有什么简单的方法吗?有的兄弟有的,那就是继承。
我们可以创造一个父类(基类),里面装着这些对象的共同点,这时候我们创造对象,直接在这个父类的基础上创建即可,想要修改也直接修改父类即可,十分方便。
继承的代码实现
首先创造一个父类:
// 父类:人(所有人类的公共属性和方法)
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(); // 王老师在讲数学(自己的方法)
}
