C++继承核心知识点总结

发布时间:2026/8/9 1:35:28
C++继承核心知识点总结 一、继承的意义继承实现类的层次复用把公共成员抽取到基类子类直接复用。 例学生、老师、保安都属于 “人”把身份证号、姓名、电话等公共属性放到基类人学生、老师直接继承不用重复写代码。访问限定符public、protected、private三种继承方式public继承、protected继承、private继承。类成员 \ 继承方式public 继承protected 继承private 继承基类 public 成员派生类 public 成员派生类 protected 成员派生类 private 成员基类 protected 成员派生类 protected 成员派生类 protected 成员派生类 private 成员基类 private 成员派生类不可见派生类不可见派生类不可见核心要点基类private私有成员无论哪种继承派生类内部都看不见、不能直接访问只是被继承到派生类对象内存中。如果子类需要访问基类成员把成员设置为protected。派生类访问权限 Min(基类成员限定符继承方式)优先级public protected private。class默认继承是privatestruct默认继承是public工程代码建议显式写继承方式。实际开发绝大多数只用public 继承protected/private继承扩展性很差几乎不用。二、基类与派生类之间转换派生类 → 基类允许public 继承下派生类对象可以赋值给基类指针 / 基类引用不需要强转。本质拿派生类对象里面基类那一部分去赋值。Student s; Person* p s; Person r s;内存视角基类指针 / 引用只能看到对象里面基类那一块内存看不见子类新增成员。基类 → 派生类直接赋值不允许基类对象不能直接赋值给派生类对象。基类指针如果原本指向派生类对象可以强制类型转换安全转回派生类指针如果基类指向的就是原生基类对象强制转换会越界出错后面dynamic_cast会做安全识别。口诀父可以接子子不能接父。三、继承中的作用域、隐藏规则基类、派生类拥有各自独立作用域。派生类和基类出现同名成员隐藏重定义。子类同名成员会屏蔽基类同名成员直接访问。注意不是重载重载要求同一个作用域。继承体系下子类和基类函数同名构成隐藏不构成重载。class A{ public: void fun(){} }; class B:public A{ public: void fun(int i){} }; // B b; b.fun(10);合法b.fun();编译报错被隐藏想要调用基类被隐藏的成员需要显式指定b.A::fun();。工程建议继承体系尽量不要定义同名成员避免混淆。四、继承和默认成员函数C6 个默认成员函数构造、析构、拷贝构造、赋值重载、取地址、const 取地址。派生类构造函数会自动调用基类构造先构造基类再构造子类。派生类析构先析构子类再析构基类。拷贝、赋值默认会调用基类对应的拷贝 / 赋值。实现不能被继承的类方案 1把基类构造函数私有化。派生类构造必须调用基类构造基类构造私有子类就无法实例化不能继承。 方案 2C11基类加final关键字class Base final {};禁止派生。五、继承与友元友元不能继承。 基类的友元不会自动成为派生类友元基类友元不能访问派生类私有、保护成员。整体工程小结public 继承是日常开发唯一主流用法。private 基类成员子类永远看不见需要子类访问就用 protected。同名是隐藏不是重载作用域不一样。父指针可以指向子对象子对象不能直接赋值给父对象反向转换要注意安全。友元不继承。