关于C++友元类的实现讲解

关于C++友元类的实现讲解

什么是友元类

在C++中,我们可以通过友元类实现类与类之间的访问权限互相扩展,允许一个类的非成员函数或其他类的成员函数访问它的私有成员。

友元类是指在一个类中访问另一个类的私有或受保护成员,需要在另一个类的定义中将该类声明为友元类。

实现步骤

1.在目标类中声明友元类

在目标类中声明友元类的方式如下:

friend class ClassName;

2.定义友元类

为了让另一个类成为友元类,我们需要在该类中定义一个友元类。

class ClassName {
    // 可以访问目标类的私有成员
    friend class TargetClass;
};

3.在友元类中访问目标类的私有成员

现在,在友元类中就可以直接访问目标类的私有成员或受保护成员了。

class ClassName {
    friend class TargetClass;
    void func(TargetClass& target) {
        // 可以访问target的私有成员
        cout << target.privateMember << endl;
    }
};

示例说明

示例1

class Circle;

class Square {
  private:
    int side;
  public:
    Square() {
        side = 4;
    }

    friend class Circle;  // 将Circle类声明为友元类

};

class Circle {
  private:
    int radius;
  public:
    Circle() {
        radius = 3;
    }
    int get_radius_of_square(Square& s) {
        return s.side;    // 定义在Circle类中的成员函数可以访问Square类的私有成员
    }
};

int main() {
    Square square;
    Circle circle;
    cout << "Radius of circle: " << circle.get_radius_of_square(square) << endl;
    return 0;
}

在上面的示例中,我们将Square类声明为Circle类的友元类,这样Circle类的成员函数就可以访问Square的私有成员,通过圆形类的成员函数来获得正方形的边长。

示例2

class TargetClass {
  private:
    int privateMember = 10;
  public:
    TargetClass() {
        privateMember = 20;
    }
    friend class ClassName;   // 将ClassName类声明为友元类
};

class ClassName {
  public:
    void func(TargetClass& target) {
        // 可以访问target的私有成员
        cout << target.privateMember << endl;
    }
};

int main() {
    TargetClass target;
    ClassName className;
    className.func(target);
    return 0;
}

在上面的示例中,我们将ClassName类声明为TargetClass类的友元类,这样在ClassName类的成员函数中就可以直接访问TargetClass类的私有成员了。

阅读剩余 58%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于C++友元类的实现讲解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 关于VS+QT5应用程序换图标的解决方案

    关于VS+QT5应用程序换图标的解决方案,可以如下操作: 1. 原理介绍 QT5程序在编译后的exe文件的图标,并不是我们常见的.ico格式,而是.qrc格式。.qrc格式是QT资源文件的格式,里面包含了程序中需要用到的图像、音频等资源。所以,如果我们想要修改QT程序的图标,实际上就是需要修改资源文件中的图标。 2. 修改.res文件 (1)在项目中添加一个…

    C 2023年5月23日
    00
  • strcat函数实现简单示例

    来讲一下“strcat函数实现简单示例”的完整攻略。 什么是strcat函数 strcat函数是C语言中的一个字符串函数,用于将一个字符串追加到另一个字符串的结尾。其函数原型为: char * strcat(char * dest,const char * src); 其中dest是目标字符串,src是要追加到目标字符串后面的字符串。该函数会将src中的字符…

    C 2023年5月23日
    00
  • C++实现关机功能详细代码

    实现关机功能的方法会因操作系统的不同而有所差异。在这里,我们以Windows操作系统为例,介绍使用C++实现关机功能的方法。 步骤 1. 引入头文件 首先需要引入Windows.h头文件,该头文件中包含的一些函数可以直接调用Windows API的功能。 #include <Windows.h> 2. 使用Windows API函数 Window…

    C 2023年5月24日
    00
  • 系统登陆就注销的解决方法

    当系统登陆后,注销的解决方法是指用户在注销前即被注销的解决方案。在这里,我们将介绍如何避免系统登陆后立即注销的问题。 问题分析 在许多情况下,系统登陆后会提示用户被注销。这可能是由于多种原因造成的,如用户的 web 会话过期、身份验证失败、管理员强制注销等等。 解决方法 在下面,将介绍一些可能的问题和解决方案,以帮助您有效修复此问题。 1. 增加会话时长 若…

    C 2023年5月23日
    00
  • C语言 详细讲解#pragma的使用方法

    C语言 详细讲解#pragma的使用方法 什么是#pragma指令 #pragma 是一种编译器辅助命令,它可以用来修改编译器的行为或者是指示编译器生成一些特定的信息。该指令一般系统指令(system directive),与C语言不直接相关。 #pragma指令的语法 下面是 #pragma 指令的语法: #pragma pragma-name [opti…

    C 2023年5月23日
    00
  • C++11智能指针之weak_ptr详解

    C++11智能指针之weak_ptr详解 简介 C++11添加了4种智能指针:unique_ptr、shared_ptr、weak_ptr、auto_ptr。其中weak_ptr是一种弱引用类型的指针,它不对所指对象进行引用计数,可以防止 shared_ptr 的循环引用问题。 特点 weak_ptr 所指向的对象可能已经被删除了,因此在使用 weak_pt…

    C 2023年5月22日
    00
  • win10打开c/d/e/f盘符很慢提示现正在处理它该怎么解决?

    Win10打开磁盘慢的解决方法 出现此问题后,是因为Win10系统正在检测并优化磁盘的性能,过程需要一定的时间。但在某些情况下,这个过程会超时,导致磁盘打开慢,以下是两种解决方法。 方法一:禁用磁盘预读取功能 Win10系统默认启用了磁盘预读取功能,这个功能会将一些磁盘里的数据预读取到内存,以加快下一次打开磁盘时的速度。但是,如果磁盘内存数据过大,预读取功能…

    C 2023年5月23日
    00
  • C语言 结构体(Struct)详解及示例代码

    C语言 结构体(Struct)详解及示例代码 什么是结构体(struct)? 结构体是C语言中一种构造类型(Compound Type),它可以将多个不同类型的变量组合成一个整体,方便在程序中进行操作。 一个结构体可以包含任意数量的成员变量,每个成员变量可以是基本类型,也可以是其他结构体类型。结构体定义语法如下: struct 结构体名称 { 数据类型 成员…

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