当前位置: 首页 > article >正文

Lesson04 类与对象(3补充 友元、内部类)

1. 友元

1.1 本质

在 C++ 的面向对象编程中,类的私有成员和保护成员通常只能被类的成员函数或友元访问。而友元是一种特殊权限,能够让非成员函数或其他类绕过类的访问权限控制,直接访问这些成员。

友元通过 friend 关键字声明,友元关系 不是互相的,即一个类声明另一个类或函数为友元,并不意味着被声明的类或函数也能自动将前者声明为友元。

1.2 友元函数(Friend Function)

  • 定义:友元函数是被类声明为友元的普通函数,可以是全局函数或某个类的静态函数。
  • 特点

        (1)友元函数不属于该类(不是类的成员)。

        (2)可以直接访问类的私有和保护成员。

        (3)通过 friend 关键字声明在类内部。

#include <iostream>
using namespace std;

class Box {
private:
    double width;

public:
    Box(double w) : width(w) {}

    // 声明一个普通函数为友元
    friend void printWidth(Box b);
};

// 定义友元函数
void printWidth(Box b) {
    // 友元函数可以直接访问 Box 类的私有成员 width
    cout << "Width: " << b.width << endl;
}

int main() {
    Box b(10.5);
    printWidth(b); // 调用友元函数
    return 0;
}

注意:虽然 printWidth 函数访问了 Box 的私有成员,但它本身不是 Box 的成员,而是一个独立的全局函数。

1.3 友元类(Friend Class)

  • 定义:友元类是被某个类声明为友元的另一个类,该友元类的所有成员函数可以访问声明它为友元的类的私有和保护成员。
  • 特点

                (1)一个类可以将另一个类声明为友元。

                (2)被声明为友元的类的所有成员函数都拥有访问权限。

                (3)友元关系是单向的,被声明的类无法反向访问声明它的类。

#include <iostream>
using n

http://www.kler.cn/a/463548.html

相关文章:

  • Node 使用pkg打包部署
  • PyTorch中的autocast:混合精度训练的实现原理
  • Llama系列关键知识总结
  • Spring Boot项目中解决跨域问题(四种方式)
  • vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404
  • UE5.4_Slate代码研究(1)
  • 【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器
  • 【每日学点鸿蒙知识】低功耗蓝牙、指纹识别认证、读取raw文件示例、CommonEvent是否跨线程、定位参数解释等
  • Eureka使用总结(自用)
  • JS中批量创建对象的三种模式(小白笔记)
  • 使用MFC编写一个paddleclas预测软件
  • 嵌入式系统 第七讲 ARM-Linux内核
  • CSS系列(48)-- Custom Highlight API详解
  • 如何实现分片上传功能:基于 Vue 和 iView 上传组件的详细教程
  • 如何寻找到文件在电脑中安装的位置
  • C++ 变量:深入理解与应用
  • 端口被占用
  • 【ArcGIS微课1000例】0136:制作千层饼(DEM、影像、等高线、山体阴影图层)
  • UML类图示例-CPP
  • C# OpenCV机器视觉:目标跟踪