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日

相关文章

  • androidstudio完美解决gradle下载慢的问题

    下面是关于“Android Studio完美解决Gradle下载慢的问题”的完整攻略: 1. 问题描述 在使用Android Studio进行开发时,有时会遇到Grad下载慢的问题,这会导致项目构建时间变长,影响开发效率。 2. 解决方法 以下是两个解决: 方法1:修改Gradle镜像源 在Gradle的配置文件中,可以修改Gradle镜像源,以加速Grad…

    other 2023年5月7日
    00
  • 注册页面之前先验证用户名是否存在的php代码

    当用户注册时,我们经常需要对用户名进行验证,以确保用户名的唯一性。其中一种常见的做法是在注册页面之前先验证用户名是否存在。以下是一些实现此功能的php代码示例。 1. 使用mysqli进行数据库操作 首先,需要确保数据库中的用户名字段是唯一的,并且使用mysqli等扩展库连接到数据库。以下是实现此功能的代码示例: <?php // 检查是否已经提交了表…

    other 2023年6月27日
    00
  • (转)-编写第一个ROS(创建工作空间workspace和功能包package)

    (转)-编写第一个ROS(创建工作空间workspace和功能包package) 介绍 在ROS中,工作空间(workspace)是存储ROS包(package)的顶层目录,一个功能包则被定义为一组相互依赖的节点和文件。在该教程中,我们将会学习如何创建一个ROS工作空间以及一个ROS功能包。 步骤 创建工作空间workspace 首先,我们需要创建一个工作空…

    其他 2023年3月28日
    00
  • Win11重启怎么不更新了?Win11重启后不更新解决方法

    针对“Win11重启怎么不更新了?Win11重启后不更新解决方法”,我提供以下攻略: 问题描述 在使用Win11时,有时会出现系统重启后不更新的情况。这可能是由于系统文件损坏、驱动程序错误等问题引起的。本文将为您提供Win11重启后不更新的解决方法。 解决方法 以下是Win11重启后不更新解决方法的详细步骤: 检查Windows更新服务 首先,打开“服务”应…

    other 2023年6月27日
    00
  • htmlref标签

    HTML ref标签详细使用方法 HTML中的ref标签可以用于创建外部资源的引用,例如文献、书籍、网站等。在本文中,我们将介绍ref标签详细使用方法。 步骤 以下是使用ref标签的步骤: 编写HTML代码。 使用ref标签创建外部资源的引用。 配置ref标签的属性。 示例 以下是两个示例,演示如何使用ref标签。 示例1:创建文献引用 在此示例中,我们将创…

    other 2023年5月6日
    00
  • PHP stristr() 函数(不区分大小写的字符串查找)

    PHP stristr() 函数(不区分大小写的字符串查找) 简介 stristr() 函数是 PHP 中用于在字符串中查找子字符串的函数。它与 strstr() 函数类似,但不区分大小写。 语法 stristr(string $haystack, mixed $needle, bool $before_needle = false): string|fal…

    other 2023年8月18日
    00
  • 基于C++全局变量的声明与定义的详解

    基于C++全局变量的声明与定义的详解 在C++中,全局变量是在函数外部声明的变量,可以在程序的任何地方使用。全局变量的声明和定义分为两个步骤:声明和定义。 声明全局变量 全局变量的声明是指在函数外部声明变量的类型和名称,告诉编译器该变量的存在。声明全局变量的语法如下: extern 数据类型 变量名; 其中,extern关键字用于告诉编译器该变量是在其他地方…

    other 2023年8月9日
    00
  • vue.js踩坑之ref引用细节点讲解

    当然!下面是关于\”Vue.js踩坑之ref引用细节点讲解\”的完整攻略,包含两个示例说明。 … … … … … … … … … … … … … … … … … … … … … … … … … … …

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