前言
写代码时总遇到'重复定义'的问题?比如 Student 和 Teacher 类都要写姓名、地址、身份认证函数,改一处就要两处同步改 —— 这就是没用到 C++ 的'继承'机制。继承是面向对象复用代码的核心,能让子类直接'继承'父类的成员和方法,再扩展自己的专属功能。这篇文章就从'继承的概念定义''基派生类转换''作用域隐藏''默认成员函数'四个核心板块入手,手把手带你搞懂继承的基础逻辑,避开常见的坑。
一、继承的概念与定义:怎么让类'复用'代码?
先想一个场景:Student 和 Teacher 都需要'姓名、地址、身份认证',但 Student 有学号、Teacher 有职称。如果各自写一遍,代码会很冗余 —— 继承就是把'公共部分'抽成父类 (基类),子类 (派生类) 直接复用。
本篇博客代码示例中所需头文件:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include <list>
using namespace std;
1.1 继承的核心概念
- 父类(基类):存放公共成员的类,比如 Person 类(包含姓名、地址、identity 身份认证函数)。
- 子类(派生类):继承父类并扩展专属成员的类,比如 Student(加学号)、Teacher(加职称)。
本质:子类是父类的'扩展',能直接用父类的公共/保护成员,不用重复定义。
1.2 继承的定义格式
关键是'继承方式 + 父类名',比如 class Student : public Person。注意两点:
class默认私有继承,struct默认公有继承,推荐显式写继承方式(比如public)。- 继承方式会影响父类成员在子类中的访问权限(后面会讲)。
有了上面的知识储备后,我们来看一段代码示例来加深理解(注意看注释):
// 基类/父类
class Person {
// 公共成员:子类和类外都能访问
public:
// 进入校园/图书馆/实验室刷二维码等身份认证
void identity() { cout << "void identity():" << _name << endl; }
void func() { cout << _age << endl; }
:
string _name = ;
string _address;
string _tel;
:
_age = ;
};
: Person {
:
{
();
}
:
_stuid;
};
: Person {
:
{
}
:
string title;
};
{
Student s;
Teacher t;
s.();
s.();
;
}


