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

简介:

摘要:

要避免交成员费:尽可能将函数指定为非成员非友元函数。

非成员非友元函数通过尽量减少依赖提高了封装性:函数体不能依赖于类的非公用成员。它们还能够分离巨类,释放可分离的功能,进一步减少耦合。它们能够提高通用性,因为在不知道一个操作是否为某个给定类型的成员的情况下,很难编写模版。

使用下面的方法确定函数是否应该是成员和友元:

//如果别无选择,就无需选择了;如果必需,就指定为成员;

If函数是操作符 =,->,或者()之一,则必须是成员:

将其制定为成员

//如果可能是非成员非友元函数,或者设为非成员非友元函数有好处,那就照办

Else if :

a)函数需要与其做参数不同的类型(例如操作符>>或者<<)

    b)需要对其最左参数进行强制转换

c)能够用类的公用接口单独实现

将其指定为非成员函数(如果情况a和情况b需要,可以将其指定为非成员友元函数)

如果需要虚拟行为:

    添加虚拟成员函数以提供虚拟行为,并通过它实现非成员函数。

Else:

    将其制定为成员函数


相关文章
|
24天前
|
存储 并行计算 前端开发
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(二)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
39 1
|
24天前
|
数据安全/隐私保护 C++ 容器
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(一)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
46 0
|
2天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
19天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
33 3
|
22天前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
96 0
|
24天前
|
存储 安全 编译器
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
106 0
|
24天前
|
安全 算法 编译器
【C++中的const函数】何时与如何正确声明使用C++ const函数(三)
【C++中的const函数】何时与如何正确声明使用C++ const函数
26 0
|
24天前
|
安全 编译器 Linux
【C++中的const函数】何时与如何正确声明使用C++ const函数(二)
【C++中的const函数】何时与如何正确声明使用C++ const函数
27 0
|
24天前
|
安全 编译器 C++
【C++中的const函数】何时与如何正确声明使用C++ const函数(一)
【C++中的const函数】何时与如何正确声明使用C++ const函数
21 0
|
24天前
|
程序员 Shell C语言
【C/C++ main函数】深入探索C++中的main函数及其参数
【C/C++ main函数】深入探索C++中的main函数及其参数
56 0