为了提供一站式服务,定义一个“清除一切”的函数。下面是两种方案:
1> 成员函数
2> 非成员、非友元函数
这两种方式哪种更好?这要从面向对象的根本谈起。
所谓面向对象,并不是把操作和数据搞到类里越多,才是好的封装。封装,是针对数据来说的。
上面的成员函数,其实对数据的封装不算好。那个非成员非友元的“双非”函数,才是封装的较好的。不仅如此,它还为WebBrowser提供了更好的扩展性,减少了编译依赖。
先说封装。封装的越多,客户看见的就越少,从而程序员就有更多的空间去修改。
再说对象内部的数据。某个数据被访问的越少,被封装的就越完全,程序员也就有越多的修改权。
若数据声明为公有或protected,则有无穷多的函数访问它,就是无封装。
私有的成员,只有成员函数、友元函数可以访问。
第一种方法定义为成员函数,增加了访问次数,相当于减弱了封装。反之,双非函数是好封装。不过,可以把clearBrowser放到别的类里。那样做不算破坏WebBrowser的封装。
另外,像WebBrowser这样的类可能有很多“便利函数”,比如为书签、打印等工作提供快捷调用的函数。常见的作法是:
所有的便利函数,都在WebBrowserStuff这个名字空间里。
STL就是这样组织的。
分享到:
相关推荐
成员函数做友元函数
以下是对C++运算符重载 成员函数与友元函数进行了介绍,需要的朋友可以过来参考下
C++友元函数的使用,这个友元函数是另一个类的成员函数
本程序是使用友元成员函数的一个典型例子,简单、实用,对于初学者很有帮助。
C++运算符重载函数作为类成员函数和友元函数.doc
友元函数,类外普通函数声明为类的友元,之后即可与类共享数据
把谭书上的例子写了一下,有空就看看。从例子中就可以看出它的一些原理。
友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。...通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。
设计一个点(Point)类,其中包括一对坐标数据成员、一个求两点之间距离的友元接口和显示坐标点的成员函数,并用数据进行测试。 (2)程序设计说明 ① 在头文件中声明类,在源文件中定义类的成员函数,采用构造函数...
私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。
这是关于C++中、如何将普通函数声明友元函数的、求间隔日期的例子。适用于C++初学者学习用。
另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部...
本文档详细介绍了C++友元函数及友元类,方便大家对比学习
友元函数的好例子 lass X { private: int i; public: X(int ii) { i=ii; } int getX() { return i; } friend int g(X x
1.尽量用类的非成员函数以及友元函数替换类的成员函数 例如一个类来模拟人People 代码如下: 1 class People{ 2 public: 3 … 4 void Getup( ); 5 void Washing( ); 6 void eating( ); 7 … 8 } 其实上面三个动作是...
日期类Date包含日期的年、月、日三个数数据成员,编写一个友元函数,求两个日期之间相差的天数; 重要的是理顺:这个函数不是Date类的成员函数
C++静态成员、友元函数、类模板实验,共3个任务
友元函数的的函数重载 是自己用过的,绝对正确
一个实例,实现运算符重载(成员函数和非成员函数两种方式),友元函数的使用,注意事项等,自己学习时编写的,
一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。那非静态的成员函数呢?一般地方都说的是,不行,做不了。。。为什么不行?都是代码区的代码,...