精華區beta EE_DSnP 關於我們 聯絡資訊
※ 引述《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
ric2k1:而且懶得 friend 一大堆 functions 12/21 22:18