頁:
[1]
[已解決]operator和冒號(:)的使用問題
本帖最後由 opchta 於 2017-7-16 11:07 AM 編輯各位大大好小弟最近在讀別人的程式,其中有兩個語法沒看過,也爬不太到它們的意思,所以想請問各位大大: 1.有關operator的用法:以下是它的片斷程式碼 class WrapFile{ typedef FILE* ptr; ptrwrap_file;public: WrapFile(const char* filename, const char* flag): wrap_file(fopen(filename, flag)) {} operator ptr() const { return wrap_file; } ~WrapFile() { if(wrap_file) { fclose(wrap_file); } }}; 其中的operator ptr() const { return wrap_file; }是什麼意思呢?這個不像operator的運算子重載,我也google不到這個用法的意義。
2.冒號及operator的另一個用法的問題以下是程式的片斷程式碼:struct trie_combine_t:public trie_iter_t{ trie_combine_t(ptrie_t pt,WordMaker* maker):ptrie(pt) ,pmaker(maker) ,word_len(0) {} void operator()(trie_result_t& res) { char suffix; ptrie->...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 本帖最後由 ren1244 於 2017-7-10 01:52 PM 編輯
搭配 typedef FILE* ptr; 來看
operator ptr() const 應該是轉型運算子
把物件轉型為 FILE* 的函數
至於struct後面的冒號我還在研究...
但很像是繼承
確實是繼承沒錯,後面那個表示它可以像函數一樣被呼叫 callable object
補充內容 (2017-7-12 10:32 PM):
是的 C++ 內. struct 跟class 是一樣的東西.
唯一不同點只有 struct 預設的存取權限是public . class 是private
因此. 所有在class 中可用的功能. 在struct 中都可以使用. 引用class內的函示會用到
繼承內部函式也會用到
只有public才可使用<br><br><br><br><br><div></div> ren1244 發表於 2017-7-10 01:50 PM static/image/common/back.gif
搭配 typedef FILE* ptr; 來看
operator ptr() const 應該是轉型運算子
把物件轉型為 FILE* 的函數
可是把const放在ptr()後有點其怪吔,而且我在vs 2015中有試過宣告WrapFile這個類別,但vs 2015直接說這個宣告錯誤,它顯示兩個錯誤,operator的地方:
int WrapFile::FILE* ptr() const遺漏明確定類型(假設為'int'),找不到operator ptr的函式定義。
prt()的地方:
int WrapFile::FILE* ptr() const 必需是運算子,找不到operator ptr的函式定義。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> cockroachrun 發表於 2017-7-11 09:51 AM static/image/common/back.gif
C++ 內. struct 跟class 是一樣的東西.
唯一不同點只有 struct 預設的存取權限是public . class 是private ...
所以我可以了解成,
trie_combine_t(ptrie_t pt,WordMaker* maker):ptrie(pt)
,pmaker(maker)
,word_len(0)
{}
是trie_combine_t這個結構的建構子囉??...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> opchta 發表於 2017-7-11 11:16 PM static/image/common/back.gif
可是把const放在ptr()後有點其怪吔,而且我在vs 2015中有試過宣告WrapFile這個類別,但vs 2015直接說這個 ...
const 放在函式後面,指的是這個函式無法修改這個物件
跟 const object 和 mutable 有關
與回傳的是 const 型態不一樣
本帖最後由 opchta 於 2017-7-16 11:08 AM 編輯
opchta 發表於 2017-7-11 11:16 PM static/image/common/back.gif
可是把const放在ptr()後有點其怪吔,而且我在vs 2015中有試過宣告WrapFile這個類別,但vs 2015直接說這個 ...
了解,感謝各位大大的回答。
關於「int WrapFile::FILE* ptr() const遺漏明確定類型(假設為'int'),找不到operator ptr的函式定義。」的問題,小弟後來自己找到原因了,是因為小弟習慣把private宣告在public的後面,在該程式中,ptr是private而且是先被宣告的,小弟自己練習的時候則是宣告在後面,當然找不到。囧rz...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁:
[1]