2013-05-13 77 views
0

我搜索了各地的会员和非会员功能之间的区别的描述,虽然我还是很困惑,我想我举个例子来说明一下我的情况。下面是我们的老师给我们作为学习材料的一个旧测试的问题:选择一个功能的成员,非会员,私人,公共等

假设我们有一个main()程序,它使用我们文本中的queue2.h和node2.h模板实现,创建一个字母队列字母)。

  1. 我们想写一个流运算符将一个字符串(事)的所有字符插入到队列(字母< <的事情)。

(b)我们是否应该使这个< <成员或非成员? 私人,公共,朋友还是两者都不?

  1. 我们希望提供一个工具(称为Get_Front),该工具返回此字符队列的头指针,以供将来使用链接列表工具套件进行操作。
    因此,当一切正确编码时,list_head_insert(head_ptr,'2')将在队列的前面放置一个'2'。

(b)我们应该让Get_Front成员还是非成员? 私人,公共,朋友还是两者都不?

我猜第一个应该作为一个非成员与一个朋友功能实现,但我不确定具体为什么?

非常感谢!

+0

使需要访问私有数据成员成员函数的东西以及不需要(或不*成为成员函数)免费函数的东西。 [这是一个很好的阅读。](http://www.gotw.ca/gotw/084.htm) – chris 2013-05-13 21:29:43

回答

0

(b)我们是否应该使这个< <成员或非成员?私人,公共,朋友还是两者都不?

会员,公众。 您创建一个队列对象和重载插入运算符作为成员函数。它可以用来将字符插入到队列中。

原因:我们想插入队列流而不是外部流,如cout。 尽可能使用成员函数是更好的做法。只有当成员不能使用时,才应该使用朋友。

Get_Front()成为公共成员函数。

+0

我同意成员函数通常应该用于朋友函数,但不能用于非朋友自由函数。 – chris 2013-05-13 21:36:47

+0

@chris:你的意思是C型功能?请你详细说明 – bjskishore123 2013-05-13 21:38:05

+0

我的意思是如果一个函数不需要访问你的类的私有部分,为什么给它这样做的能力? – chris 2013-05-13 21:41:56

0

很难说不知道上面描述的程序的真正目的。我可以给你一些一般的答案。

做一个功能

  1. 市民如果你希望它被任何人访问。
  2. PRIVATE如果你只想让该类的成员函数和朋友访问。
  3. PROTECTED如果您只想要该成员函数和该类的朋友以及派生类的成员函数和朋友进行访问。
  4. FRIEND如果你想访问类私人成员。

至于成员&非成员而言,这又是很难在不知道实现 细节说。如果该函数必须访问该类的私有成员,则它必须是成员函数。