C++中友元类和嵌套类使用详解

yizhihongxing

C++中友元类和嵌套类使用详解

在C++中,友元类和嵌套类是两个重要的概念。友元类允许一个类的成员函数或其他类访问该类的私有成员,而嵌套类则是在一个类的内部定义另一个类。下面将详细讲解这两个概念的使用方法,并提供两个示例说明。

友元类(Friend Class)

友元类允许一个类的成员函数或其他类访问该类的私有成员。为了实现友元类,需要在类的声明中使用friend关键字来声明友元类。下面是一个示例:

class MyClass {
private:
    int privateData;

public:
    MyClass() : privateData(0) {}

    friend class FriendClass;
};

class FriendClass {
public:
    void accessPrivateData(MyClass& obj) {
        obj.privateData = 10; // 可以访问MyClass的私有成员
    }
};

在上面的示例中,FriendClass被声明为MyClass的友元类。因此,FriendClass的成员函数accessPrivateData可以访问MyClass的私有成员privateData

嵌套类(Nested Class)

嵌套类是在一个类的内部定义另一个类。嵌套类可以访问外部类的私有成员,而外部类也可以访问嵌套类的私有成员。下面是一个示例:

class OuterClass {
private:
    int privateData;

public:
    OuterClass() : privateData(0) {}

    class NestedClass {
    private:
        int nestedPrivateData;

    public:
        NestedClass() : nestedPrivateData(0) {}

        void accessOuterPrivateData(OuterClass& obj) {
            obj.privateData = 10; // 可以访问OuterClass的私有成员
        }
    };
};

在上面的示例中,NestedClassOuterClass的嵌套类。因此,NestedClass的成员函数accessOuterPrivateData可以访问OuterClass的私有成员privateData

示例说明

友元类示例

class MyClass {
private:
    int privateData;

public:
    MyClass() : privateData(0) {}

    friend class FriendClass;
};

class FriendClass {
public:
    void accessPrivateData(MyClass& obj) {
        obj.privateData = 10; // 可以访问MyClass的私有成员
    }
};

int main() {
    MyClass obj;
    FriendClass friendObj;
    friendObj.accessPrivateData(obj);
    return 0;
}

在上面的示例中,FriendClass被声明为MyClass的友元类。在main函数中,我们创建了一个MyClass对象obj和一个FriendClass对象friendObj。然后,我们调用friendObj的成员函数accessPrivateData来访问obj的私有成员privateData,并将其设置为10。

嵌套类示例

class OuterClass {
private:
    int privateData;

public:
    OuterClass() : privateData(0) {}

    class NestedClass {
    private:
        int nestedPrivateData;

    public:
        NestedClass() : nestedPrivateData(0) {}

        void accessOuterPrivateData(OuterClass& obj) {
            obj.privateData = 10; // 可以访问OuterClass的私有成员
        }
    };
};

int main() {
    OuterClass obj;
    OuterClass::NestedClass nestedObj;
    nestedObj.accessOuterPrivateData(obj);
    return 0;
}

在上面的示例中,NestedClassOuterClass的嵌套类。在main函数中,我们创建了一个OuterClass对象obj和一个OuterClass::NestedClass对象nestedObj。然后,我们调用nestedObj的成员函数accessOuterPrivateData来访问obj的私有成员privateData,并将其设置为10。

希望这个攻略对你理解C++中友元类和嵌套类的使用有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中友元类和嵌套类使用详解 - Python技术站

(0)
上一篇 2023年7月27日
下一篇 2023年7月27日

相关文章

  • Java超详细讲解继承和多态的使用

    Java超详细讲解继承和多态的使用 一、继承 继承是指一个类从另一个类中继承属性和方法的能力。可以将这个继承的类称为子类(派生类),被继承的类称为父类(基类或超类)。 1.1 继承的语法 Java中使用关键字 extends 来继承一个类。 class ChildClass extends ParentClass { } 1.2 继承的特点 子类拥有父类的所…

    other 2023年6月27日
    00
  • Centos 安装及配置OpenNMS以及opennms介绍和配置图文教程

    以下是“CentOS安装及配置OpenNMS以及OpenNMS介绍和配置图文教程”的完整攻略。 CentOS安装 下载CentOS的ISO镜像并制作成启动U盘或光盘。 将U盘或光盘插入电脑中,选择从U盘或光盘启动,并按照提示完成CentOS的安装。 安装后,可以通过终端输入命令:cat /etc/redhat-release来查看CentOS的版本号。 Op…

    other 2023年6月27日
    00
  • Linux(CentOS)常用操作指令(一)

    Linux(CentOS)常用操作指令(一) Introduction 在使用Linux(CentOS)操作系统时,我们经常需要使用到一些常用的指令,本篇文章将会介绍一些基础的操作指令,以供大家参考。 Command list 以下是一些常用的Linux(CentOS)操作指令: 1. cd cd指令是切换当前目录的命令。比如我们要进入”/home”目录,只…

    其他 2023年3月28日
    00
  • java中lombok的@Data引发问题详解

    Java中Lombok的@Data引发问题详解 引言 Lombok是一个Java库,可以自动为Java类生成一些标准的方法(如 equals(), hashCode(), toString() 等),以减少样板代码的编写。其中,@Data是Lombok中一种常用的注解,作用是自动生成JavaBean中的getter/setter方法、hashCode/equ…

    other 2023年6月27日
    00
  • springboot 接口版本区分方式

    Spring Boot 接口版本区分方式攻略 在使用 Spring Boot 开发接口时,有时候需要对接口进行版本区分,以便在不破坏现有接口的情况下进行升级或者新增功能。下面是一种常见的接口版本区分方式的攻略。 1. URL路径区分版本 一种常见的接口版本区分方式是通过在URL路径中添加版本号来区分不同的接口版本。例如: GET /api/v1/users …

    other 2023年8月3日
    00
  • 华为荣耀6开发人员选项在哪里?怎么开启?

    首先我们需要了解一下什么是开发人员选项。 开发人员选项是Android中一个相对高级的设置选项,允许用户访问开发者选项、USB调试模式、OEM解锁以及更多高级设置。这些选项对于开发人员较为重要,但并不适合所有用户开启。 那么接下来,我将会给大家介绍华为荣耀6开发人员选项在哪里以及如何开启。 测量开发人员选项 打开设置。 向下滚动,找到“关于手机”并点击。 在…

    other 2023年6月28日
    00
  • kotlin延迟初始化和密封类详细讲解

    Kotlin延迟初始化和密封类详细讲解 延迟初始化 变量初始化的必要性 在我们的编程方式中,定义变量的时候需要先为它们分配内存空间并初始化。这个过程是我们工作中必须要注意的事项之一,它可以保证变量能够正常使用。但在某些情况下,当我们希望使用某个变量时,它还没有被初始化,这时就会引发代码的运行时错误。 延迟初始化 为了解决以上问题,Kotlin中提供了延迟初始…

    other 2023年6月20日
    00
  • ntfs格式分区是什么意思

    下面我来详细讲解“NTFS格式分区是什么意思”。 什么是NTFS格式分区? NTFS,全称为New Technology File System,即新技术文件系统,是Windows操作系统中默认的文件系统类型。NTFS分区通常被用于高性能的硬盘,可以支持大文件存储、文件加密、资源管理等功能。NTFS格式分区的实现主要依赖于Windows操作系统,因此只有在W…

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