C++中的三种继承public,protected,private详细解析

让我来为大家讲解一下C++中的三种继承——public、protected和private。

什么是继承

在C++中,继承是一种从已存在的类中派生出新的类的机制。通过继承,新的类可以获得已存在的类的所有属性和行为。

三种继承方式

public继承

public继承是基类(被继承类)中的public和protected成员在派生类(继承类)中仍旧保持public和protected属性,而基类中的private成员不可见。下面是一个示例:

#include <iostream>
using namespace std;

// 基类
class Base{
    public:
        int public_var = 0;
    private:
        int private_var = 0;
    protected:
        int protected_var = 0;
};

// 派生类
class Derived : public Base{
    public:
        void access_base_member(){
            cout << public_var << endl;  // 可以访问public属性
            // cout << private_var << endl;  // 错误:不能访问private属性
            cout << protected_var << endl;  // 可以访问protected属性
        }
};

int main(){
    Derived derived;
    derived.access_base_member();
    return 0;
}

输出结果:

0
0

protected继承

protected继承是基类中所有成员都被继承到派生类中,且所有成员在派生类中变成protected属性。在派生类及其实例中,protected成员可以被访问,基类对象和非派生类(即没有被继承的类)不可以访问。下面是一个示例:

#include <iostream>
using namespace std;

// 基类
class Base{
    public:
        int public_var = 0;
    private:
        int private_var = 0;
    protected:
        int protected_var = 0;
};

// 派生类
class Derived : protected Base{
    public:
        void access_base_member(){
            cout << public_var << endl;  // 可以访问protected属性
            // cout << private_var << endl;  // 错误:不能访问private属性
            cout << protected_var << endl;  // 可以访问protected属性
        }
};

int main(){
    Derived derived;
    derived.access_base_member();
    return 0;
}

输出结果:

0
0

private继承

private继承是基类中所有成员都被继承到派生类中,且所有成员在派生类中变成private属性。在派生类及其实例中,private成员可以被访问,基类对象和非派生类不可以访问。下面是一个示例:

#include <iostream>
using namespace std;

// 基类
class Base{
    public:
        int public_var = 0;
    private:
        int private_var = 0;
    protected:
        int protected_var = 0;
};

// 派生类
class Derived : private Base{
    public:
        void access_base_member(){
            cout << public_var << endl;  // 可以访问private属性
            // cout << private_var << endl;  // 错误:不能访问private属性
            cout << protected_var << endl;  // 可以访问private属性
        }
};

int main(){
    Derived derived;
    derived.access_base_member();
    return 0;
}

输出结果:

0
0

总结

通过上述示例,我们了解了C++中的三种继承方式:public、protected和private,它们的区别在于派生类中基类成员属性的变化以及对基类成员的访问权限不同。需要注意的是,对于访问级别,不仅影响派生类的成员函数,也影响到通过派生类对象访问的基类成员函数。

以上是关于C++中三种继承方式的详细解析,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的三种继承public,protected,private详细解析 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • java-spark中各种常用算子的写法示例

    Java-Spark中常用算子的写法示例攻略 本攻略旨在向读者介绍Java-Spark中常用算子的写法示例。Java-Spark是一个开源的分布式计算框架,提供了丰富的算子用于数据处理和分析。下面将详细介绍一些常用的算子及其示例使用方法。 1. map算子 map算子用于对RDD中的每个元素应用一个函数并返回一个新的RDD。下面是一个示例,将RDD中的所有元…

    other 2023年6月28日
    00
  • Java多维数组和Arrays类方法总结详解

    Java多维数组和Arrays类方法总结详解 什么是Java多维数组? Java多维数组是一种特殊的数组,它由多个相同长度的一维数组组成,每个一维数组即代表其中的一维,通过多维数组我们可以更方便地表示和操作多维数据,如矩阵、图像等。 Java多维数组的定义语法如下: type[][][] arrayName = new type[length1][lengt…

    other 2023年6月25日
    00
  • tdesign vue初始化组件源码解析

    当我们需要在Vue项目中使用TDesign组件库时,需要先对组件进行初始化。而tdesign库提供了一种方便快捷的初始化方式,即可直接使用组件库内置的TDesign注入器,对组件进行初始化。具体操作如下: 步骤一:安装TDesign 可以使用npm安装TDesign: npm install tdesign -S 步骤二:引入TDesign初始化器 在Vue…

    other 2023年6月20日
    00
  • vagrant安装

    Vagrant安装 Vagrant是一款用于构建和管理虚拟开发环境的工具。它可以自动化虚拟机的创建、配置和销毁,得开发者可以快速地搭建开发环境。本文将详细讲解Vagrant的安装过程,并提供两个示例说明。 1. 安装VirtualBox Vagrant需要依赖于虚拟化软件,常用的虚拟化件是VirtualBox。因此,在安装Vagrant之前,需要先安装Vir…

    other 2023年5月8日
    00
  • 如何修复在Win 11/10 中复制时无法从源文件或磁盘读取的问题

    修复在Win 11/10中复制时无法从源文件或磁盘读取的问题的攻略如下: 1. 检查磁盘错误 可能该磁盘出现了一些错误,导致无法读取。我们可以通过以下步骤进行磁盘错误检查: 打开“文件资源管理器”或“此电脑”,找到需要检查的磁盘。 右键点击该磁盘,选择“属性”。 点击“工具”选项卡,点击“错误检查”。 点击“扫描驱动器”或“检查”按钮,开始扫描和修复磁盘错误…

    other 2023年6月26日
    00
  • 10个常见的电脑问题的解决方案

    10个常见电脑问题的解决方案 电脑问题是日常工作、学习中不可避免的,以下是解决10个常见电脑问题的方案,希望可以帮到你。 1. 电脑开机黑屏 检查电脑是否正常供电,试着换一根电源线或插头 检查是否有蓝屏错误,进入安全模式尝试 2. 电脑无法连接无线网络 检查无线网卡驱动是否正常,尝试卸载重装驱动 重启无线路由器并重试连接 3. Windows系统更新失败 修…

    other 2023年6月26日
    00
  • C语言使用结构体实现简单通讯录

    下面就为您详细讲解使用C语言结构体实现简单通讯录的攻略。 1. 理解结构体和通讯录的概念 通讯录就是记录联系人信息的一种工具,可以用结构体来表示每个联系人的信息,如姓名、手机号码、地址、电子邮件等。 结构体(struct)是C语言的一种自定义数据类型,它可以由不同类型的数据成员组成。比如说,我们可以定义一个包含姓名、电话、地址、邮件四个成员的结构体类型: s…

    other 2023年6月27日
    00
  • linux crash工具安装配置

    以下是“OpenCV与Qt的环境搭建及Demo的完整攻略”,包括安装配置的步骤、示例说明和注意事项。 Linux Crash工具的概念 Linux Crash工具是一种用于分析Linux系统崩溃的工具,可以帮助用户快速定位系统崩溃的原因。Linux Crash工具可以分析系统的内存转储文件,提供了一系列命令用于查看系统状态、进程信息、内存使用情况等。 Lin…

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