C++ 继承详解及实例代码

C++ 继承详解及实例代码

什么是继承

继承是一种面向对象编程中常用的技术,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承使得代码重用和维护变得更加容易,同时还可以提供多态行为和高层次的抽象。

继承的类型

C++ 支持以下几种继承类型:

  • 公有继承(public inheritance)
  • 私有继承(private inheritance)
  • 保护继承(protected inheritance)

公有继承

公有继承表示子类可以访问父类的公有成员和保护成员,但不可以访问父类的私有成员。一个子类可以有多个公有基类。

class Parent {
public:
    int m_public;
protected:
    int m_protected;
private:
    int m_private;
};

class Child : public Parent {
public:
    void access_parent_members() {
        m_public = 1; // OK
        m_protected = 2; // OK
        // m_private = 3; // Error! Cannot access private member.
    }
};

私有继承

私有继承表示子类可以访问父类的公有成员和保护成员,但这些成员在子类中都变成私有成员。一个子类只能有一个私有基类。

class Parent {
public:
    int m_public;
protected:
    int m_protected;
private:
    int m_private;
};

class Child : private Parent {
public:
    void access_parent_members() {
        m_public = 1; // OK
        m_protected = 2; // OK
        // m_private = 3; // Error! Cannot access private member.
    }
};

保护继承

保护继承和私有继承类似,但子类中所有父类成员都变成了保护成员。一个子类只能有一个保护基类。

class Parent {
public:
    int m_public;
protected:
    int m_protected;
private:
    int m_private;
};

class Child : protected Parent {
public:
    void access_parent_members() {
        m_public = 1; // OK
        m_protected = 2; // OK
        // m_private = 3; // Error! Cannot access private member.
    }
};

实例代码

示例 1:形状的继承

考虑一个简单的系统,其中有三个形状类:圆形、正方形和矩形,它们都有一个计算面积的方法。我们可以定义一个基类 Shape,并让这三个形状类从 Shape 类中继承计算面积的方法。

class Shape {
public:
    virtual double get_area() const = 0;
};

class Circle : public Shape {
    double m_radius;
public:
    Circle(double radius) : m_radius(radius) {}

    virtual double get_area() const override {
        return 3.14 * m_radius * m_radius;
    }
};

class Rectangle : public Shape {
    double m_width;
    double m_height;
public:
    Rectangle(double width, double height) : m_width(width), m_height(height) {}

    virtual double get_area() const override {
        return m_width * m_height;
    }
};

class Square : public Rectangle {
public:
    Square(double side) : Rectangle(side, side) {}
};

在上面的代码中,Shape 类是一个抽象基类,其中定义了纯虚函数 get_area(),任何从 Shape 类继承的子类都必须实现这个函数。Circle 类和 Rectangle 类都从 Shape 类中继承了 get_area() 函数,并分别实现了自己的计算面积的方法。Square 类从 Rectangle 类中继承了 get_area() 函数,并重新定义了自己的形状。

示例 2:多重继承

多重继承是指一个子类从多个父类中继承属性和方法的情况。C++ 支持多重继承,可以通过在子类中使用逗号分隔的方式继承多个父类。

class A {
public:
    int m_a;
};

class B {
public:
    int m_b;
};

class C : public A, public B {
public:
    int get_sum() {
        return m_a + m_b;
    }
};

在上面的代码中,类 C 从类 A 和类 B 中继承了它们的成员变量 m_a 和 m_b。由于 m_a 和 m_b 都是公有成员,因此可以在子类 C 中访问它们。C 类还定义了一个成员函数 get_sum(),用于计算 m_a 和 m_b 的和。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 继承详解及实例代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • MathWorks Matlab R2021b(V9.11)密钥安装+许可激活图文教程

    首先,需要注意的是,安装和激活Matlab软件需要使用合法的许可证密钥。本攻略提供的密钥仅供学习和测试目的。 下载Matlab安装包 首先,需要前往MathWorks官网下载Matlab R2021b安装包。如果已经拥有安装包,则跳过此步。 前往官网: https://www.mathworks.com/downloads/ 选择“Download”按钮,进…

    C 2023年5月22日
    00
  • 何时喝水一些分析

    何时喝水一些分析 喝水是我们日常生活中非常重要的一项习惯,正确的喝水方式和时间也会对我们的身体健康产生积极影响。本文将从几个方面来分析何时喝水最为合适。 饮食时间 饮食时间是影响我们喝水的一个重要因素。如果在饭前喝水会引起胃酸稀释,影响胃中消化酶的活性,导致吸收不良。因此,在饭前应该尽量避免喝水。但是,如果已经喝饱水,可以等待30分钟再吃饭。 而在饭后喝水则…

    C 2023年5月23日
    00
  • VSCode插件开发全攻略之package.json详解

    下面我会详细讲解“VSCode插件开发全攻略之package.json详解”的完整攻略。 前言 package.json是Node.js项目中的配置文件,也是VSCode插件开发中必不可少的一部分。它用于描述插件的信息、依赖项、命令脚本等,同时也是发布插件到市场上所必需的信息之一。这篇攻略将为大家详细讲解package.json的全部内容,从而帮助开发者更好…

    C 2023年5月23日
    00
  • mysql之数据库常用脚本总结

    下面我将详细讲解“mysql之数据库常用脚本总结”的完整攻略。 mysql之数据库常用脚本总结 前言 本文介绍了mysql中常用的一些数据库脚本,包括数据库备份与恢复、表备份与恢复、创建数据库和表、修改表结构等。 数据库备份与恢复 备份 使用mysqldump命令备份数据库: $ mysqldump -u username -p database > …

    C 2023年5月22日
    00
  • .NET(C#)连接各类数据库代码-集锦

    . 前言 本文将为大家介绍如何使用.NET (C#)代码连接各种不同类型的数据库。无论是关系型数据库,还是NoSQL数据库,本文都将为您提供一条清晰明了的攻略。本文例举了连接MySQL和MongoDB两个数据库的示例,以供读者参考和学习。 . 连接MySQL数据库 连接MySQL数据库可以使用MySQL官方提供的Connector/NET组件,该组件提供了与…

    C 2023年5月22日
    00
  • 深入理解C++模板如何实现多态思想

    深入理解C++模板如何实现多态思想 C++模板是一种高度通用化的编程工具,除了可以用来实现代码复用之外,还可以用来实现多态的编程思想。在这里,我将详细介绍如何使用C++模板来实现多态的思想,涵盖泛型编程、函数模板、类模板等方面。 一、泛型编程泛型编程是C++模板多态思想的最基本组成部分,其核心思想是将数据类型与算法分离,从而实现代码的通用化。在使用C++模板…

    C 2023年5月23日
    00
  • C++深入探究类与对象之友元与运算符重载

    C++深入探究类与对象之友元与运算符重载 友元(friend)是 C++ 中比较特殊的概念,它可以使一个类中的非成员函数访问类的私有成员,非常适合于一些特殊的应用场景。本文将深入讲解 C++ 中友元的使用方法并结合示例进行说明。 友元的概念 在 C++ 中,我们可以使用关键字 friend 定义友元,其作用是允许其他类或者函数访问该类的私有成员。简而言之,友…

    C 2023年5月22日
    00
  • vscode配置远程开发环境并远程调试运行C++代码的教程

    下面我将为您详细讲解如何使用 VSCode 配置远程开发环境并远程调试运行 C++ 代码。 准备工作 在开始之前,我们需要准备以下工具和环境: VSCode Remote Development 插件 SSH 客户端程序 远程服务器 其中,Remote Development 是一个专门提供远程开发功能的 VSCode 插件,它可以让我们在本地使用 VSCo…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部