→ ric2k1:而且懶得 friend 一大堆 functions 12/21 22:18
※ 引述《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