[C++]尽量用非成员函数,非友元函数替换成员函数

ESP32天线阵列实现Wi-Fi空间成像与无直视定位 Wi-Fi信道状态信息(CSI)是OFDM系统中表征多径传播特性的基础物理层参数,其复数值包含幅度与相位,可反映无线环境的空间特征。基于CSI的射频感知技术,通过提取子载波级信道响应,结合阵列信号处理,实现到达角(AoA)估计与深度映射,本质是将通信链路重构为空间域传感器。该技术无需专用雷达硬件,具备低成本、被动式、隐私友好等工程优势,在室内定位、行为识别、仓储导航等场景具有广泛落地价值。本文聚焦ESP32平台,详解多芯片相位同步、CSI零拷贝采集、嵌入式MUSIC算法及信道图谱轻量化部署等关键实现。 阅读详情

《Effective C++》第23条

这本书真是字字珠玑。。

下面是一个网页浏览器的类,他有清除缓存,清除历史记录,清除cookies几个功能。

为了方便,设计者可能还会提供一个函数执行所有这3个函数,以实现清除所有记录。

有两种写法,

其一,

 

其二,把removeCookies 放在类外面,

面对对象要求数据应尽可能被分装,使得某一块数据的更改对系统的影响降到最低。如果把  clearBrower 作为成员函数,那么他就可以访问 WebBrower 类的私有数据,一旦这些私有数据发生变化,可能导致 clearBrower 也要改变。而把函数作为非成员函数,类的私有数据就完全与 clearBrower 无关。(类的私有成员最怕曝光。。。)

对于C#, JAVA 这些“所有函数都必须定义与 class 内”的语言,可以令 clearBrower 成为某工具类的一个静态成员函数(static member)。

像clearBrower一样的便利函数可能有很多,某些和书签相关,有些和cookie相关。可以把他们放到不同的头文件中。将书签相关的函数声明于一个头文件中,cookie相关的函数声明于另一个头文件中,以此类推。这样当用户用到有关书签的便利函数时,就不会与其他便利函数发生编译依存关系。

阅文集团大数据面试题及参考答案 在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark; 阅读详情

相关推荐

记录一下本地部署Dify的坑

1. 截止2025-3-4为止,请注意,不要直接拉Dify的1.0.0版本。请先试用0.15.3版本。1.0.0有一个bug需要解决。3. 请使用docker-ce 新版本,docker-engine等老版本可能会有部分容器启动脚本执行莫名报错。2. 注意,请使用docker-compose V2版本,或者V1较高版本,否则会导致解析官方yml模板错误。

哈利路亚的收藏夹 5346

C++编程规范之44:优先编写非成员非友元函数

摘要: 要避免交成员费:尽可能将函数指定为非成员非友元函数。 非成员非友元函数通过尽量减少依赖提高了封装性:函数体不能依赖于类的非公用成员。它们还能够分离巨类,释放可分离的功能,进一步减少耦合。它们能够提高通用性,因为在不知道一个操作是否为某个给定类型的成员的情况下,很难编写模版。 使用下面的方法确定函数是否应该是成员和友元: //如果别无选择,就无需选择了;如果必需,就指定为成员;

longshengguoji的专栏 2066

公文派2025:免费社区版重大安装更新!

距离上一次更新已经过去了将近一年的时间,今天我们带来了全新的免费2025社区版,该版本也是目前最新的版本,无需授权即可使用所有的功能。

似最初 1963

C++中的成员函数与非成员函数

1.成员函数和非成员函数 其实简单来说成员函数是在类中定义的函数,而非成员函数就是普通函数,即不在类中定义的函数,其中非成员函数比较典型的是友元函数。 2.详细解释 成员函数是类定义的一部分,通过特定的对象来调用。成员函数可以隐式访问调用对象的成员,而无须使用成员操作符。 友元函数不是类的组成部分,因此被称为直接函数调用。友元函数不能隐式访问类成员,而必须将成员操作符用于作为参数传递的对象。 3.总结 1.成员函数是面向对象的概念,所谓的成员函数,是指一个函数作为类的成员,公

zxmyoung的博客 8418

ECU-TEST新手入门:从软件申请到第一个测试包创建的完整保姆级流程

本文详细介绍了ECU-TEST软件从申请试用、安装配置到创建第一个测试包的完整流程。针对新手用户,提供分步指导,包括界面认知、测试组件添加、变量定义及执行结果分析,帮助快速掌握汽车电子测试工具的基本操作。特别说明试用授权的两种获取方式和安装注意事项。

weixin_30606461的博客 481

【漆学军】MT4进阶到MT5速成之路(2)获取持仓

MT5在持仓获取上,要比MT4复杂些,分两部分,获取持仓和挂单采用了不同的方法。 一、获取持仓中的buy和sell单 int b=0;//获取buy单个数 int s=0;//获取sell单个数 double lot_total_buy=0;//获取持仓中buy单的总手数 double lot_total_sell=0;//获取持仓中sell单的总手数 for(int i=0; i<PositionsTotal(); i++) { ulong ticket=Positi

漆学军的编程笔记 1625

C++中成员函数,非成员函数和友元函数

转自:http://blog.chinaunix.net/uid-10673338-id-2936852.html 转自:http://www.cnblogs.com/carsonzhu/p/5024585.html   对以上两篇文章,我添加了自己已有的部分知识,并重新地汇总整理 转载请注明:http://blog.youkuaiyun.com/lee_shuai   从函数定义的位置来粗略理解

Lee_Shuai的博客 7390

YOLO26改进策略【卷积层】| DWRSeg :高效获取多尺度上下文信息,二次改进C3k2

本文记录的是利用DWR 模块改进 YOLO26 的特征提取部分。(Dilation-wise Residual)通过两步残差流程(区域残差化-语义残差化)与分支化空洞卷积结合,引导解码器处理特征与跳接特征的多尺度精准融合。本文利用模块,通过区域残差化生成简洁区域型特征图以简化融合基础,再通过分支化空洞卷积捕捉多尺度空间上下文,同时依托残差连接保留原始特征信息,对YOLO26中不同尺度目标特征进行针对性强化、抑制无效背景特征干扰,在特征融合阶段实现多尺度语义与细节信息的高效互补,避免传统多感受野卷积的冗余计算

Limiiiing的博客 159

【C++ 成员函数与非成员函数】

在C++编程中,成员函数和非成员函数都是关键的概念。它们提供了不同的方法来组织和处理代码,具有各自的优势和用途。本文将深入研究成员函数和非成员函数,以帮助您了解何时使用它们以及如何做出正确的选择。

Guojiahui的博客 862

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2575

如何实现一个用STM32F103C8T6作为主控芯片,加上AD8232、MAX30102 、MPU6050模块的用于运动中监测心率变异性??

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1213

C++ 类:类相关的非成员函数、构造函数

**前提:**仍有 Sales_data 类的代码: struct Sales_data { std::string isbn() const { return bookNo; } // 返回 isbn 编号 Sales_data& combine (const Sales_data&); // 模拟 += 运算 double avg_price() c...

Error Man 的博客 2546

智驾芯片&软件分层&测试

智能驾驶相关的芯片,软件分层,测试相关内容

天赐好车的博客 437

《Effective C++》学习笔记(条款23:宁以非成员非友元函数替换成员函数)

最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!! 假设用一个 class 来表示网页浏览器,这样的 class 中有清除缓存、清除历史纪录以及清除cookies: class WebBrowser{ public: void clearCache(); void clearHistory(); void removeCookies(); //把调用上述的三个函数的操作封装到一个函数内 void

ZLX的博客 357

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Effective C++读书笔记---将成员变量声明为Private;宁以非成员、非友元函数替换成员函数

将成员变量声明为Private 原因如下: 1,语法一致性,暴露出来的都是函数 2.可以对每一个变量实现权限控制,“不准访问”“只读访问”“读写访问” 3.具备更好的封装性,可以有效保障在更改某些成员变量时不会影响客户的使用 protected成员变量同样不具备较好的封装性。 宁以非成员、非友元函数替换成员函数 此条款的逻辑是这样的,当我们讨论一个类的封装性的时候。越

PENGH56的专栏 475

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[Effective C++]条款23:宁以non-member、non-friend替换member函数

这个原则的核心思想是,如果一个函数不需要直接访问类的私有或受保护成员,那么它应该被设计为非成员函数(non-member function),而不是成员函数(member function)在C++中,宁以非成员函数、非友元函数替换成员函数,的设计原则是为了增强封装性、减少类之间的耦合,并提高代码的灵活性和可维护性。有一个坐标点类Point,现在需要实现一个函数来计算两个点的距离。

Tim_10的博客 425

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Effective C++ 读书笔记(八)

如果你要在成员函数和非成员函数之间做抉择,而两者提供相同的机能,那么非成员函数较好一些,因为其不增加可访问类内private成分的函数数量,这也解释了我们开始的问题。假设一个public成员变量被取消,所有使用它的客户代码都会被破坏,因此,public成员变量没有封装性。c++标准库不是单一的,整体的、庞大的再一个头文件中包含所有东西,而是有数十个头文件<vector><memory>等等,每个头文件声明某些机能,如果客户只想用vector,就没必要包含其他。越多函数可访问它,数据的封装性越低。

qq_53660404的博客 636

条款23和条款24

条款23:宁以non-member、non-friend替换member函数 为什么要用非成员函数、非友元函数替换成员函数呢?其实这是为了保证数据的封装性。而数据的封装性强弱是怎么体现的呢?一种粗糙的量测,我们认为越多的函数能访问它,数据的封装性就越低,因为如果数据发生改变,因它的改变牵扯到需要改变的太多,所以它的封装性较差。 而非成员函数、非友元函数较成员函数而言,不能访问private中的数据,自然封装性就更好一些。 需要注意的是,只因在意封装性而让函数“成为class的non-member”,并不意味

gaoyuelong的博客 387

Effective C++笔记 (4.设计与声明)

条款18:让接口容易被正确使用,不易被误用请记住:好的接口很容易被正确使用,不容易被误用。你应该在你的所有接口中努力达到这些性质。“促进正确使用”的方法包括接口的一致性,以及与内置类型的行为兼容。“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。trl::shared_ptr支持定制型删除器(custom deleter)。这可防范DLL问题,可被用来自动...

HHXUN的博客 289

effective c++18-25条款“接口设计与声明”整理

一、让接口容易被正确使用,不易被误用 接口设计的原则是,方便日后和其他用户的使用,不要把问题留给接口使用者 (1)用常规的用法调用“特别”设计的接口。所以需要尽可能的把自己的设计往常规上靠:数据对象的行为要尽可能符合内建对象(比如int)的行为;接口的名字和意义要尽可能一致(比如STL中的容器基本都有一个叫做size的返回容器大小的接口)……这样做鼓励用户去正确的看待和使用你的接口。   

hustyangju的足迹 1054

Effective C++ 条款 23:宁以 non-member、non-friend 替换 member 函数

【代码】Effective C++ 条款 23:宁以 non-member、non-friend 替换 member 函数。

weixin_42255569的博客 337

Effective C++读书笔记——item23(用非成员,非友元函数取代成员函数)

函数可以将不同的功能分布在不同的函数中,而不是将所有功能都集中在类的成员函数里。接口来访问类,这意味着它们不能直接访问类的。因为它拥有比实际所需更多的对类内部的访问权限。函数放在一个命名空间中,形成一个功能集合。命名空间中添加即可,而不用修改。类变得臃肿,同时也不会增加。类,当需要添加新的操作。可以将清除操作的功能与。类的封装性负担,因为。

weixin_46032775的博客 1370

Effective C++之 Item 23: 用非成员非友元函数取代成员函数

想象一个象征 web 浏览器的类。在大量的函数中,这样一个类也许会提供清空已下载成分的缓存。清空已访问 URLs 的历史,以及从系统移除所有 cookies 的功能: class WebBrowser {public: ... void clearCache(); void clearHistory(); void removeCookies(); ...}; 很多用户希望能一起执...

janeqi1987的专栏 205

条款23:宁愿以非成员,非友元替换成员函数

class WebBrowser { public: ... void clearCache(); void clearHistory(); void removeCookies(); ... }; 如果想执行类里面所有的动作,有点用户可能会提供这样的一个函数 class WebBrowser { public : ... ...

w0131的博客 185

C++ 友元函数重载运算符 <<

C++ 友元函数重载运算符

程永强 1636

Effective C++条款23:宁以 non-member、non-friend替换member函数

Effective C++条款23:宁以 non-member、non-friend替换member函数(Prefer non-member non-friend functions to member functions)

CltCj的博客 492
上一篇: [C++]前置声明和头文件
下一篇: [译]如何统一多边形顶点排列顺序
农夫三拳
博客等级 码龄18年 31粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值