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

yizhihongxing

让我来为大家讲解一下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日

相关文章

  • 魔兽世界7.3.5增强萨怎样输出 增强萨团本大秘境输出手法及技能循环

    魔兽世界增强萨输出攻略 1. 技能循环 增强萨是近战攻击职业,主要依靠奥术打击和风暴打击两个技能来输出伤害。以下是常用的技能循环: 狂暴之怒 (准备阶段) 巨人打击 (开场) 奥术打击 + 风暴打击(交替使用) 焚烧 + 元素掌握 + 闪电之盾 (用技能积攒能量) 巨人打击 + 奥术打击 + 风暴打击 重复以上步骤直到目标死亡 2. 属性和装备 增强萨主要依…

    other 2023年6月27日
    00
  • ajax的异步操作及页面重定向跳转

    Ajax的异步操作及页面重定向跳转 在现代Web应用中,Ajax已成为不可或缺的一部分,它可以让我们在不刷新整个页面的情况下,向服务器发送请求并获取数据,从而实现动态更新页面的效果。本文将介绍Ajax的异步操作以及如何在Ajax中实现页面重定向跳转。 Ajax异步操作 异步操作是指不需要等待任务完成就可以继续执行下一个操作。Ajax的异步操作就是通过XMLH…

    其他 2023年3月28日
    00
  • 8款超好用的svg编辑工具用起来

    以下是“8款超好用的SVG编辑工具”的完整攻略: 8款超好用的SVG编辑工具 SVG是一种矢量图形格式,它可以在不失真的情况下缩放到任意大小。本攻略将介绍8款超好用的编辑工具,帮助您轻松创建和编辑SVG图形。 1. Inkscape Inkscape是一款免费的开源SVG编辑器,它提供了丰富的绘图工具和编辑功能。Inkscape支持多种文件格式,包括SVG、…

    other 2023年5月7日
    00
  • 通过adb命令发送广播

    以下是详细讲解“通过adb命令发送广播的完整攻略”的标准Markdown格式文本,包含两个示例说明: 通过adb命令发送广播的完整攻略 在Android开发中,我们可以通过adb命令发送广播,以触发应用程序中的广播接收器。本攻略将介绍如何通过adb命令发送广播。 步骤一:连接设备 首先,需要通过USB连接Android设备,并在开发者选项中启用USB调试模式…

    other 2023年5月10日
    00
  • iOS输出手机系统版本号

    以下是关于“iOS 输出手机系统版本号”的完整攻略,包含了两个示例说明。 输出手机系统版本号 要输出手机的系统版本号,可以使用以下代码: let 系统版本号 = UIDevice.current.systemVersion print(\"手机系统版本号:\\(系统版本号)\") 在这个示例中,我们使用了 UIDevice.current…

    other 2023年8月2日
    00
  • angular中实现控制器之间传递参数的方式

    ny) { this.sharedData = data; } getSharedData() { return this.sharedData; }} ### 步骤二:在发送参数的控制器中设置参数值 在发送参数的控制器中,通过依赖注入方式引入共享服务,并使用`setSharedData`方法设置参数值。 “`typescript import { Com…

    other 2023年8月21日
    00
  • 详解Linux 中获取硬盘分区或文件系统的 UUID 的七种方法

    下面是详解Linux中获取硬盘分区或文件系统的UUID的七种方法的完整攻略: 概述 UUID (通用唯一标识符) 是一种行业标准,用于唯一标识信息。在Linux中,我们可以使用UUID来标识硬盘分区和文件系统。获取UUID是非常有用的,特别是在自动挂载硬盘等操作中。 方法一:使用blkid命令 blkid命令可以列出设备的文件系统和UUID信息。具体操作如下…

    other 2023年6月27日
    00
  • 3.live555源码分析—延时队列

    3.live555源码分析—延时队列 在live555的源码中,有一个名为”DelayedTaskQueue”的类,被用作事件调度系统中的延时事件队列。 它由系统上的多个任务和回调组成,负责在需要时自动调用这些任务和回调。 在本文中,我们将深入研究live555的源码实现,以便更好地理解延时队列的原理和功能。 1. DelayedTaskQueue类 D…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部