条款23:宁以non-member,non-friend 替换member函数

探讨在C++中使用非成员非友元函数替代成员函数来提高封装性和减少编译依赖的方法,通过具体示例说明如何将一些通用操作独立出来。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*条款23:宁以non-member,non-friend 替换member函数*/
#include<iostream>
using namespace std;
class WebBorwser{
public:
	void clearCache(){}
	void clearHistory(){}
	void removeCookies(){}
	//...
	void clearEverything(){//1
		clearCache();
		clearHistory();
		removeCookies();
	}
};
void clearBrowser(WebBorwser &wb){//2
	wb.clearCache();
	wb.clearHistory();
	wb.removeCookies();
}
/*把清除所有的动作放在类内还是类外??
  理论:条款22曾说成员变量应该是私有,因为如果不是,就有无限的函数可以访    问它们也就失去封装性 能够访问私有成员变量的函数只有类内的成员函数    与友元函数也就是说放在类内的清除函数扩大了私有数据被访问的可能
  解决:1 对于所有的函数定义在类内的语言(JAVA,C#)也可以把清除所有函数定义在某个工具类(utility class的一个static member函数,只要它不是WebBrowser的一部分或是友元,就不会影响WebBrowser的成员封装性)
     2 namespace WebBrowserStuff{
	 class WebBrowser{...}
	 void clearBrowser(WebBrowser&wb);
	 提示:namespace可以跨越多个源码文件而后者不能
	 ------------------
	 WebBrowser类内还可能有其他大量便利函数
	 通常大多数客户只对其中某些感兴趣,没道理对书签便利函数感兴趣的窗户却与一个cookie相关便利函数发生编译相依关系,那么分离方法是:
	 //对文件“webbrowser.h" 这个头文件针对 class WebBrowser自身
	 namespace WebBrowserStuff{
	 class WebBrowser{...}
	 }
	//头文件"webbrowserbookmarks.h"
	namespace WebBrowserStuff{
	.....//书签相关的便利函数
	}
	//头文件"webbrowsercookis.h"
	namespace WebBrowserStuff{
	...//与cookie相关的便利函数
	}
	非成员友元函数可增加封装性,包裹弹性,机能扩充性
*/
int main(){


	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值