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

网页设计网站源代码淘宝网站的建设目的

网页设计网站源代码,淘宝网站的建设目的,河南做个人网站,淄博网站建设 leda.cc理解 C 中的友元(Friend) 在 C 语言中,封装(Encapsulation) 是面向对象编程的重要特性之一。它允许类将数据隐藏在私有(private)或受保护(protected)成员中,…

理解 C++ 中的友元(Friend)

在 C++ 语言中,封装(Encapsulation) 是面向对象编程的重要特性之一。它允许类将数据隐藏在私有(private)或受保护(protected)成员中,防止外部直接访问。然而,在某些情况下,我们希望某些函数或类能够访问这些私有成员,而不破坏封装性。这时,我们就需要友元(Friend)


1. 什么是友元?

友元(friend) 是 C++ 提供的一种机制,它允许一个函数或另一个类访问某个类的私有和受保护成员。友元有三种类型:

  1. 友元函数(Friend Function)

  2. 友元类(Friend Class)

  3. 友元成员函数(Friend Member Function)


2. 友元函数

友元函数是一个非成员函数,但它可以访问类的私有和受保护成员。要声明友元函数,需要在类内部使用 friend 关键字。

示例:友元函数

#include <iostream>
using namespace std;class Box {
private:double width;public:Box(double w) : width(w) {}// 声明友元函数friend void printWidth(const Box &b);
};// 定义友元函数
void printWidth(const Box &b) {cout << "Width: " << b.width << endl;
}int main() {Box b(10.5);printWidth(b);return 0;
}

在上面的示例中,printWidth 不是 Box 类的成员函数,但由于它被声明为 friend,它可以访问 Box 的私有成员 width


3. 友元类

友元类允许一个类访问另一个类的私有和受保护成员。

示例:友元类

#include <iostream>
using namespace std;class Engine {
private:int horsepower;public:Engine(int hp) : horsepower(hp) {}// 声明 Car 为友元类friend class Car;
};class Car {
public:void showEnginePower(const Engine &e) {cout << "Engine horsepower: " << e.horsepower << endl;}
};int main() {Engine e(150);Car c;c.showEnginePower(e);return 0;
}

在这个例子中,CarEngine 的友元类,因此它可以访问 Engine 类的私有成员 horsepower


4. 友元成员函数

我们还可以只将另一个类的某个成员函数设为友元,而不是整个类。

示例:友元成员函数

#include <iostream>
using namespace std;class Engine;class Car {
public:void showEnginePower(const Engine &e);
};class Engine {
private:int horsepower;public:Engine(int hp) : horsepower(hp) {}// 声明 Car::showEnginePower 为友元friend void Car::showEnginePower(const Engine &e);
};void Car::showEnginePower(const Engine &e) {cout << "Engine horsepower: " << e.horsepower << endl;
}int main() {Engine e(200);Car c;c.showEnginePower(e);return 0;
}

这里 Car::showEnginePowerEngine 的友元成员函数,因此它可以访问 Engine 的私有成员。


5. 友元的应用场景

友元在以下情况中非常有用:

  1. 运算符重载(如 operator<<operator>> 需要访问类的私有成员)。

  2. 类之间的紧密协作(如 Car 需要访问 Engine 的私有数据)。

  3. 全局函数需要访问私有数据(如调试函数、日志记录等)。


6. 友元的优缺点

优点:

  • 允许外部函数/类访问私有数据,增强类之间的协作能力。

  • 使操作符重载更加直观。

缺点:

  • 破坏了封装性,降低了数据的安全性。

  • 可能导致代码耦合度增加。


7. 总结

  1. 友元函数 可以访问类的私有/受保护成员,但不是类的成员。

  2. 友元类 允许另一个类访问本类的私有成员。

  3. 友元成员函数 允许一个类的特定成员函数访问本类的私有成员。

  4. 友元应该谨慎使用,避免破坏封装性。

http://www.dtcms.com/a/490888.html

相关文章:

  • 分布式系统的幂等性设计:从理论到生产实践
  • Advanced Port Scanner,极速端口扫描利器
  • 字节面试题
  • 个人项目开发(2) 基于MFA实现的双重登录验证
  • 邢台做移动网站公司电话号码中国设计之家
  • 丹阳高铁站对面的规划打开这个网站你会回来感谢我的
  • 2025年--Lc194-516. 最长回文子序列(动态规划在字符串的应用,需要二刷)--Java版
  • [HTML]播放wav格式音频
  • IntentService 的应用场景和使用方式?
  • 【开题答辩实录分享】以《基于大数据技术的二手车交易数据分析与设计》为例进行答辩实录分享
  • 基础开发工具(上)
  • k8s lngress与安全机制
  • 大模型微调(一):有监督微调与困惑度
  • 网站建设步骤图片素材WordPress点击出现爱心
  • 《从零搭建现代 Android 模块化架构项目(2025 最新实践)》
  • 深圳燃气公司有哪些大型网站和小企业站优化思路
  • AWS CloudWatch Logs Insights:实时日志分析,让服务器问题无所遁形
  • 云服务器与传统服务器租用的核心差异解析(云服务器与服务器租用之间的区别在哪里?)
  • NewStarCTF2025-Week2-Web
  • 自己做网站需要做服务器如何用dw制作网页框架
  • 使用Deepseek解析PDF文件
  • 跨链协同制造中的服务博弈与激励机制
  • 在半导体制造中什么是晶圆退火工艺?
  • 赋能高效电池制造:圆柱电芯组合式双面自动点焊技术
  • 【项目】基于多设计模式下的同步异步日志系统 - 项目介绍与前置知识
  • saas建站和开源建站的区别哈尔滨建站怎么做
  • 鸿蒙Harmony实战开发教学(No.4)-RichText组件基础到高阶介绍篇
  • 外包网站价格介绍西安网页设计
  • yolov3代码详解
  • 第六篇移动端知识,vw/vmin适配方案...