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日

相关文章

  • C 判断

    当在编写 C 语言程序时,我们可能需要使用判断语句来根据条件执行不同的代码块。C 中有三种不同的判断语句:if 语句、switch 语句以及三目运算符。在这里,我将详细讲解这三种判断语句的使用方法和语法规则。 if 语句 if 语句允许我们对一个条件进行测试,并根据测试结果决定是否执行某个代码块。其基本语法如下: if (条件) { 需要执行的代码块 } 其…

    C 2023年5月10日
    00
  • C++面向对象中构造函数使用详解

    C++面向对象中构造函数使用详解 在C++面向对象编程中,构造函数是一个非常重要的概念,它负责对象的初始化和内存分配等工作。本文将详细讲解C++面向对象中构造函数的使用,包括构造函数的声明、定义以及调用,以及构造函数的默认参数和重载等概念。 构造函数的声明与定义 构造函数的声明和普通函数的声明类似,都需要指定函数名、参数列表和返回类型。但是,构造函数没有返回…

    C 2023年5月22日
    00
  • AngularJs directive详解及示例代码

    关于AngularJS directive详解,我将分以下几个部分进行讲解: Directive 是什么? Directive 的基本概念 Directive 的分类 Directive 的语法 Directive 的示例说明 Directive 是什么? Directive(指令)是 AngularJS 中最重要的一项功能。Directive 可以让你自定…

    C 2023年5月22日
    00
  • C语言实现扫雷游戏小项目

    C语言实现扫雷游戏小项目攻略 1. 项目需求 本项目是一个简单的命令行扫雷游戏,主要需求如下: 使用C语言编写; 实现基础的扫雷游戏逻辑、界面和操作; 实现自定义雷区难度选择功能; 实现输赢判断和计分功能。 2. 项目实现思路 2.1 界面设计 扫雷游戏的主界面应该包含以下元素: 雷区:即扫雷主要游戏区域,显示方格和地雷的分布情况; 游戏操作区:便于玩家控制…

    C 2023年5月23日
    00
  • OPPO R1C怎么样?OPPO R1C发布时间及配置介绍

    OPPO R1C怎么样? 发布时间 OPPO R1C是2015年1月发布的,当时它的外观设计和拍照功能引起了很多人的关注。 配置介绍 外观设计 OPPO R1C采用了2.5D玻璃面板和金属边框的设计,具有非常优秀的手感和外观表现。另外,R1C还采用了悬浮玻璃后盖设计,整体视觉效果非常出色。 基本配置 OPPO R1C搭载了高通骁龙615的芯片,采用超大1/3…

    C 2023年5月23日
    00
  • C语言实现数独程序的示例代码

    下面是关于“C语言实现数独程序的示例代码”的完整攻略: 一、编写数独程序的流程 1. 确定程序输入和输出 数独程序的输入应该是一个9×9的矩阵,即数独的谜题,其中0表示未知格子。程序的输出应该是一个解开谜题后的9×9矩阵。 2. 确定算法 数独程序的算法一般有两种,分别是暴力求解和回溯法。 2.1 暴力求解 暴力求解是指从左到右、从上到下依次填数,直到填到空…

    C 2023年5月23日
    00
  • 在C++中加载TorchScript模型的方法

    在C++中加载TorchScript模型的方法 如果我们想要在C++中加载TorchScript模型(.pt或.pkl文件),则需要使用到libtorch库和TorchScript API。下面是加载模型的完整攻略: 下载libtorch库 在pytorch官网下载适合自己操作系统的libtorch库,解压后即可得到所需的头文件和库文件。 编写加载模型的代码…

    C 2023年5月23日
    00
  • C++调用C#的DLL程序实现方法

    C++调用C#的DLL程序实现方法,主要分为两个步骤,一是在C#中编写DLL类库文件,二是在C++中使用DllImport函数调用C#的DLL程序。下面进行详细说明。 编写C#的DLL类库文件 在C#中编写DLL类库文件的步骤如下: 新建C# Class Library项目,编写需要导出的类和方法,例如下面的代码: using System; using S…

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