详解C++编程中多级派生时的构造函数和访问属性

yizhihongxing
  1. 多级派生的构造函数

C++中多级继承的构造函数可以使用初始化列表来构造。子类的构造函数可以通过在初始化列表中调用父类的构造函数来完成基类的初始化工作,同时也可以在子类的初始化列表中为子类自身的成员变量赋初值。

例如下面的代码:

class Grandparent {
public:
    int a;
    Grandparent(int _a) : a(_a) {}
};

class Parent : public Grandparent {
public:
    int b;
    Parent(int _a, int _b) : Grandparent(_a), b(_b) {}
};

class Child : public Parent {
public:
    int c;
    Child(int _a, int _b, int _c) : Parent(_a, _b), c(_c) {}
};

int main() {
    Child child(1, 2, 3);
    cout << child.a << " " << child.b << " " << child.c << endl;
    return 0;
}

这里我们定义了三个类Grandparent、Parent和Child,Child是多重继承自Parent和Grandparent。我们定义了一个带有三个参数的Child的构造函数,在初始化列表中调用了Parent的构造函数和Grandparent的构造函数,并对自己的成员c赋初值。在main函数中我们创建了一个Child类型的对象child,并输出了它的三个成员变量的值。

输出结果为:

1 2 3
  1. 多级派生的访问属性

多级派生中的访问属性遵循C++的继承规则。子类可以访问父类的公有成员,但不能访问父类的私有成员。如果父类的成员是保护的,子类可以访问,但子类的子类不能访问。

我们可以通过下面的代码来说明这个规则:

class Grandparent {
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Parent : public Grandparent {
public:
    void foo() {
        cout << a << endl;  // 可以访问Grandparent的公有成员
        cout << b << endl;  // 可以访问Grandparent的保护成员
        // cout << c << endl;  // 错误:不能访问Grandparent的私有成员
    }
};

class Child : public Parent {
public:
    void bar() {
        cout << a << endl;  // 可以访问Grandparent的公有成员
        cout << b << endl;  // 可以访问Grandparent的保护成员
        // cout << c << endl;  // 错误:不能访问Grandparent的私有成员
    }
};

int main() {
    Child child;
    child.foo();  // 可以访问
    child.bar();  // 可以访问
    // cout << child.a << endl;  // 错误:不能直接访问Grandparent的成员
    // cout << child.b << endl;  // 错误:不能直接访问Grandparent的成员
    // cout << child.c << endl;  // 错误:不能直接访问Grandparent的成员
    return 0;
}

这里我们定义了三个类Grandparent、Parent和Child,Child是多重继承自Parent和Grandparent。Grandparent有一个公有成员a、一个保护成员b和一个私有成员c。Parent和Child都有一个成员函数foo()和bar(),分别用来测试访问Grandparent的成员。在main函数中创建一个Child类型的对象child,并调用它的foo()和bar()函数来测试。

输出结果为:

0
0

这里我们发现,Child对象的a和b成员可以正常访问,但不能直接访问Grandparent的成员。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C++编程中多级派生时的构造函数和访问属性 - Python技术站

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

相关文章

  • zip伪加密(deprecated)

    zip伪加密(deprecated) 在过去,一些人使用Zip伪加密来保护其机密数据。然而,这种方法已经被证明是不安全的,因为它只是简单地让Zip文件看起来加密,并没有真正的对文件进行加密。 什么是Zip伪加密? Zip伪加密是一种不安全的对Zip文件进行加密的方法。使用此方法,您可以打开一个看起来是加密的Zip文件,但实际上Zip文件中存储的所有文件可以很…

    其他 2023年3月28日
    00
  • React Server Component混合式渲染问题详解

    针对“React Server Component混合式渲染问题详解”的完整攻略,我将按照以下几个方面进行详细讲解: React Server Component(RSC)是什么? RSC背景和优势 RSC的混合式渲染 两个示例说明 结论和总结 1. React Server Component(RSC)是什么? React Server Component…

    other 2023年6月26日
    00
  • 关于linux:apt-get:找不到命令

    当在Linux系统中使用apt-get命令时,有时会出现“找不到命令”的错误。这通常是由于系统中没有安装apt-get或者apt-get不在系统的PATH环境变量中。以下解决这个问题的两种方法: 方法1:安装apt-get 如果系统中没有安装apt-get,可以通过以下命令安装: sudo apt-get update sudo apt-get instal…

    other 2023年5月7日
    00
  • 从UI Automation看Windows平台自动化测试原理

    UI Automation是Windows平台上的一种自动化测试技术,它可以模拟用户操作,对Windows应用程序进行自动化测试。在本文中,我们将详细介绍UI Automation的原理和使用方法,并提供两个示例说明。 UI Automation的原理 UI Automation是一种基于Microsoft Active Accessibility(MSAA…

    other 2023年5月5日
    00
  • 魔兽世界6.0猎人输出循环 生存射击兽王分析

    魔兽世界6.0猎人输出循环 生存射击兽王分析 生存猎人输出循环 生存猎人是一种以生存为主题的猎人职业,主要特点是德鲁伊的化身,能够使用治疗、控制和伤害技能等多种技能,能单独进行大部分任务。 生存猎人的输出循环主要包括以下几个步骤: 稳固射击:可以用于快速输出、击退一些小怪。每次施放该技能后,下次稳固射击的攻击速度将会提高。建议在怪物从远处奔向自己时就施放该技…

    other 2023年6月27日
    00
  • 怎么把mp4转换成mp3完美解决方案

    当需要将视频文件中的音频提取出来时,我们可以把mp4格式的视频转换为mp3格式的音频文件。下面是一些简单的步骤来转换Mp4至mp3。 步骤1: 下载并安装FFmpeg 首先我们需要下载和安装FFmpeg。FFmpeg是一种用于处理音频、视频和图像的免费开源软件库,可在多个平台上运行。尽管FFmpeg没有界面,但它可以通过命令行实现许多编解码和编辑任务。对于W…

    other 2023年6月26日
    00
  • Global.asax的Application_BeginRequest实现url重写无后缀的代码

    Global.asax的Application_BeginRequest实现url重写无后缀的代码攻略 在ASP.NET中,可以使用Global.asax文件中的Application_BeginRequest事件来实现URL重写,以去除URL中的文件后缀。下面是实现这一功能的完整攻略: 打开你的ASP.NET项目,并找到Global.asax文件。 在Gl…

    other 2023年8月5日
    00
  • VNC远程控制软件怎么用?VNC客户端+服务器端安装及配置图文详细教程(附下载)

    详细讲解“VNC远程控制软件怎么用?”如下所述: 1. 简介 VNC(Virtual Network Computing)是一种远程桌面控制技术,它通过网络将一台机器的桌面图像传输到另一台机器上,使得用户可以在另一台机器上对该机器进行完全控制。 2. VNC安装与配置 2.1 VNC服务器端的安装与配置 VNC服务器端常用的有 TightVNC、RealVN…

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