当前位置: 首页 > news >正文

C++ 继承详解:基础篇(含代码示例)

目录

1. 什么是继承?

2. 继承的访问控制

3. 派生类构造与析构

(1) 构造顺序

(2) 析构顺序

4. 函数隐藏(Name Hiding)


1. 什么是继承?

继承(Inheritance)是面向对象编程(OOP)的核心特性之一,它允许一个类(派生类/子类)继承另一个类(基类/父类)的成员(变量和函数),从而实现代码复用和层次化设计。

  • access-specifier 可以是 publicprotected 或 private,决定基类成员在派生类中的访问权限。

2. 继承的访问控制

C++ 支持三种继承方式:

继承方式基类 public 成员基类 protected 成员基类 private 成员
publicpublicprotected不可访问
protectedprotectedprotected不可访问
privateprivateprivate不可访问

示例:

class Base {
public:int x;
protected:int y;
private:int z;
};class PublicDerived : public Base {// x 是 public// y 是 protected// z 不可访问
};class ProtectedDerived : protected Base {// x 是 protected// y 是 protected// z 不可访问
};class PrivateDerived : private Base {// x 是 private// y 是 private// z 不可访问
};

3. 派生类构造与析构

(1) 构造顺序

  1. 基类构造函数(先构造父类)
  2. 派生类成员变量构造函数
  3. 派生类构造函数

(2) 析构顺序

  1. 派生类析构函数
  2. 派生类成员变量析构函数
  3. 基类析构函数

示例:

#include <iostream>
using namespace std;class Base {
public:Base() { cout << "Base 构造" << endl; }~Base() { cout << "Base 析构" << endl; }
};class Derived : public Base {
public:Derived() { cout << "Derived 构造" << endl; }~Derived() { cout << "Derived 析构" << endl; }
};int main() {Derived d;  // 输出:// Base 构造// Derived 构造// Derived 析构// Base 析构return 0;
}

4. 函数隐藏(Name Hiding)

如果派生类定义了与基类同名的函数(即使参数不同),基类的函数会被隐藏,除非显式调用。

示例:

class Base {
public:void show() { cout << "Base::show()" << endl; }
};class Derived : public Base {
public:void show(int x) { cout << "Derived::show(int)" << endl; }
};int main() {Derived d;d.show();       // ❌ 编译错误,基类 show() 被隐藏d.show(10);     // ✅ 输出 "Derived::show(int)"d.Base::show(); // ✅ 输出 "Base::show()"return 0;
}

解决方法:

class Derived : public Base {
public:using Base::show; // 引入基类的 show()void show(int x) { cout << "Derived::show(int)" << endl; }
};

相关文章:

  • NRM:快速切换 npm 镜像源的管理工具指南
  • RPG游戏设计战斗篇——战法牧协同作战体系研究
  • 如何把vue项目部署在nginx上
  • IP查询基础介绍
  • 【商业分析】充分了解“特性”和“功能”的区别,加强资源的聚焦度。
  • C语言数据结构-链式栈
  • 让MySQL更快:EXPLAIN语句详尽解析
  • Vue3集成Element Plus完整指南:从安装到主题定制下-实现后台管理系统框架搭建
  • C++ class和struct的区别
  • Linux中的文件描述符
  • SIAM-2010《Making $k$-means even faster》
  • Kubernetes 自动缩放模式:HPA、VPA
  • Laravle 证件照排版
  • AD9268、AD9643调试过程中遇到的问题
  • 转移dp简单数学数论
  • SAR ADC 的DAC 参考的选择逻辑
  • 精益数据分析(82/126):先行指标驱动的增长黑客策略——从相关性到因果性的跨越
  • ollama接入图像识别大模型
  • PINN高阶技术综合应用:复杂问题求解与神经算子进阶
  • C/C++STL---<chrono>
  • php wap网站实现滑动式数据分页/数字营销服务商seo
  • 重庆网站建设如何/长沙网站优化方案
  • a站下载安装/seo没什么作用了
  • 大连商城网站建设/抖音推广方案
  • excel做网站链接/国家高新技术企业查询
  • 人大门户网站建设工作/宁波核心关键词seo收费