作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] HW5 compile error
时间Thu Dec 21 22:16:52 2006
※ 引述《samuelduan ()》之铭言:
: 标题: Re: [问题] HW5 compile error
: 时间: Thu Dec 21 16:12:09 2006
:
: ※ 引述《karate362 (最近腰不痛的卡拉特)》之铭言
: : 另外 SList是使用了template的类别
: : 那麽在它自己的member function 宣告一个iterator的时候
: : 不用写SList<T>::iterator 写iterator就可以吗?
: : 宣告一个SListnode时 语法一定要写成SListnode<int> node 这样的形式吗?
:
: 我觉得我的问题跟这个很像 XD
:
: 在 class DList::iterator / Array::iterator 这两个 iterator class 的宣告中
:
: 有出现 friend class DList / friend class Array
:
: 而在 class SList::iterator 则否
:
: 那这代表的是在定义 class SList 的member fnt 时
:
: 无法直接使用 iterator 吗?
:
: 如果可以的话 那为何在 DList/Array 中 还要加上 friend... 这样的宣告呢?
:
DList/Array::iterator 里面要宣告 friend class DList/Array 的原因主要是
像是 insert/erase 等 functions 必须要 access iterator::_node, 而我又不想
写一个 iterator::getNode() 的 public function 让外面的人也可以 access 到
iterator::_node.
SList 则没有这个问题.
:
: 其实我想重点是在一个 class 中再包另一个 interator class
:
: 那这个 iterator class 跟包住它 class 的 member function 间的关系究竟为何呢?
:
差别只是 "definition/naming domain" 的问题, 也就是说这个 iterator class 是属於
包住它 class 里面的范围内, 在同样的范围内你可以用 "iterator" 这个名字直接去
access 它, 而在范围外你必须 specify like "DList::iterator". (有点像 namespace
的概念)
至於 public/private 等 access privilege 的规则, 则是跟外面的 class 一样.
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.109.223.18
: 推 karate362:似乎是想让我们宣告O(n)的erase和insert才不写friend? 12/21 18:45
: 推 timrau:就算有friend, erase和insert仍然是O(n) 12/21 18:48
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.91.222.144
1F:→ ric2k1:而且懒得 friend 一大堆 functions 12/21 22:18