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

C++中类继承的意义

C++中类继承是面向对象编程的核心概念之一,它的意义主要体现在以下几个方面:

1. 代码复用(Code Reuse)

继承允许新的类继承现有类的属性和方法,避免了重复编写代码。

cpp

下载

复制

运行

class Vehicle {
protected:double speed;
public:void accelerate(double amount) {speed += amount;}double getSpeed() const { return speed; }
};// Car类继承Vehicle的所有功能
class Car : public Vehicle {
private:int passengerCount;
public:void carryPassengers(int count) {passengerCount = count;}
};

2. 建立is-a关系(Is-A Relationship)

继承建立了类之间的层次关系,表达"是一个"的概念。

cpp

下载

复制

运行

class Shape {
public:virtual double area() const = 0; // 纯虚函数virtual ~Shape() {} // 虚析构函数
};class Circle : public Shape {
private:double radius;
public:Circle(double r) : radius(r) {}double area() const override {return 3.14159 * radius * radius;}
};class Rectangle : public Shape {
private:double width, height;
public:Rectangle(double w, double h) : width(w), height(h) {}double area() const override {return width * height;}
};

3. 多态性(Polymorphism)

通过继承实现运行时多态,允许使用基类指针或引用来操作派生类对象。

cpp

下载

复制

运行

void printArea(const Shape& shape) {std::cout << "Area: " << shape.area() << std::endl;
}// 使用多态
Circle circle(5.0);
Rectangle rect(4.0, 6.0);printArea(circle); // 输出圆的面积
printArea(rect);   // 输出矩形的面积

4. 接口与实现分离

通过抽象基类定义接口,派生类提供具体实现。

cpp

下载

复制

运行

class Database {
public:virtual void connect() = 0;virtual void query(const std::string& sql) = 0;virtual ~Database() {}
};class MySQLDatabase : public Database {
public:void connect() override {std::cout << "Connecting to MySQL..." << std::endl;}void query(const std::string& sql) override {std::cout << "Executing MySQL query: " << sql << std::endl;}
};class PostgreSQLDatabase : public Database {
public:void connect() override {std::cout << "Connecting to PostgreSQL..." << std::endl;}void query(const std::string& sql) override {std::cout << "Executing PostgreSQL query: " << sql << std::endl;}
};

5. 扩展现有功能

可以在不修改原有类的基础上扩展功能。

cpp

下载

复制

运行

class BasicCalculator {
public:double add(double a, double b) { return a + b; }double subtract(double a, double b) { return a - b; }
};class ScientificCalculator : public BasicCalculator {
public:double multiply(double a, double b) { return a * b; }double divide(double a, double b) { if (b != 0) return a / b;throw std::runtime_error("Division by zero");}
};

6. 继承的类型

公有继承(Public Inheritance)

cpp

下载

复制

运行

class Base {
public:int publicVar;
protected:int protectedVar;
private:int privateVar;
};class Derived : public Base {// publicVar 仍然是 public// protectedVar 仍然是 protected// privateVar 不可访问
};

保护继承(Protected Inheritance)

cpp

下载

复制

运行

class Derived : protected Base {// publicVar 变为 protected// protectedVar 仍然是 protected// privateVar 不可访问
};

私有继承(Private Inheritance)

cpp

下载

复制

运行

class Derived : private Base {// publicVar 变为 private// protectedVar 变为 private// privateVar 不可访问
};

7. 实际应用示例

cpp

下载

复制

运行

// 游戏开发中的继承示例
class GameObject {
protected:Vector2 position;Vector2 velocity;
public:virtual void update(float deltaTime) = 0;virtual void render() = 0;virtual ~GameObject() {}
};class Player : public GameObject {
private:int health;int score;
public:void update(float deltaTime) override {position += velocity * deltaTime;// 玩家特定的更新逻辑}void render() override {// 渲染玩家角色}
};class Enemy : public GameObject {
private:int damage;
public:void update(float deltaTime) override {position += velocity * deltaTime;// 敌人特定的AI逻辑}void render() override {// 渲染敌人}
};

总结

C++中类继承的主要意义:

  • 提高代码复用性,减少重复代码

  • 建立清晰的类层次结构,表达现实世界的关系

  • 实现多态性,提高代码的灵活性和可扩展性

  • 分离接口与实现,提高代码的可维护性

  • 支持开闭原则,对扩展开放,对修改关闭

正确使用继承可以创建出更加灵活、可维护和可扩展的面向对象系统。

http://www.dtcms.com/a/353754.html

相关文章:

  • PMP项目管理知识点-⑮预测型项目概念辨析
  • 【Kafka】项目整合使用案例
  • 瑞芯微开发工具Linux Linux_Upgrade_Tool使用方法(镜像烧录)
  • Python 比较huggingface_hub库的hf_hub_download函数和snapshot_download函数
  • 在 .NET 8.0 中实现 JWT 刷新令牌
  • 密钥管理服务KMS介绍
  • 遗传算法:模拟自然选择的优化智慧
  • 可编辑69页PPT | 某手机品牌主数据治理项目案例
  • 神经网络学习笔记12——高效卷积神经网络架构MobileNet
  • Origin 2024 安装包下载与安装教程
  • 【算法速成课1 | 题解】洛谷P3366 【模板】最小生成树 MST(Prim Kruskal)
  • 深度学习入门:神经网络基础知识
  • YOLO11实战 第006期-基于yolo11-seg的香蕉种植园语义分割实战文档(yolo格式数据免费获取)
  • MDK-5.4.2 集成 Compiler 5 编译器
  • 基于SpringBoot的协同过滤余弦函数的美食推荐系统(爬虫Python)的设计与实现
  • 数据结构:堆(Heap)
  • 生成式AI的引擎室:深入剖析LLM内存管理与调度
  • 【解锁Photonics for AI:系统学习光学神经网络与超表面设计,成就下一代光芯片工程师】
  • python - js的引入方式、注释变量、数据类型、强制转换、自动类型转换、js运算符、分支结构、函数
  • Nginx单端口代理多个前后端服务的完整配置指南
  • 【雅思019】Canceling an appointment
  • 数据结构——算法设计的基本思想(穷举、递归、分治等)
  • 【自用】JavaSE--junit单元测试、反射、注解、动态代理
  • FreeRTOS 常见面试题与核心知识点详解
  • Redis数据持久化——RDB快照和Aof日志追加
  • 8.28 模拟
  • 从易用性的角度来看,哪个ETL平台比较好用?
  • MySQL-数据类型
  • Clerk 用户认证系统集成文档
  • 关于virtual camera