2012年4月23日 星期一
[C++] const 篇
在之前的文章中有提到
我們如果要為類別(class)撰寫介面函式如get的話
可以寫成:
vector& getNameList() {
return _nameList;
}
const vector& getNameList() const {
return _nameList;
}
不過其實const的學問是很博大精深的
2012年4月19日 星期四
[Ubuntu]
每次重灌ubuntu時都會發現缺東缺西的
趕緊記下來以免又忘了
[Git]
sudo apt-get install git-core git-doc gitweb git-gut gitk git-email git-svn趕緊記下來以免又忘了
[Git]
git config --global color.ui true
git config --global user.name "Boton Chou"
git config --global user.email "xxx@gmail.com"
git config --global user.name "Boton Chou"
git config --global user.email "xxx@gmail.com"
2012年4月7日 星期六
[C++] 各式各樣的CAST
如果你對static_cast, dynamic_cast 等等還不甚熟悉
那你一定不常使用多型 (polymorphism)
更別說你懂物件導向語言
今天要講的主題是cast運算子 (operator)
包括了static_cast, const_cast, dynamic_cast, reinterpret_cast這四個運算子
這裡我就擷取一些精華翻譯一下:
2012年4月3日 星期二
[C++] 公用函式 - GET篇
這篇是寫給習慣在code時
加上const qualifie的人看的教學
如果你還沒有加const的習慣
那請現在趕快開始
ps. 雖然我知道加const很痛苦
而且每次加了const之後compliler就一直該
乾脆把全部const都砍了算了...
加const的好處在此就不贅述
隨便google都找的到
===========以上是前言============
首先你要有一個自己寫的class
然後你要熟悉什麼是const method
一般來說
我們都會為每個private成員寫set/get函式
比如說:
int getName() const {
return _name;
}
(加const原因在於getName這種取用函式不應該更動data member值)
這則我們要討論的是當data member不是基本資料型態時
比如說:
vector getNameList() const {
return _nameList;
}
這樣寫有個壞處
程式中的
_nameList 會在回傳時被copy一次
造成多餘的運算拖累執行時間
尤其是當使用者只是想要"讀"
_nameList 時
這樣的寫法就顯得更笨拙了
所以我們通常會回傳reference,寫成以下形式:
vector& getNameList() const {
return
_nameList;
}
不過這時compiler馬上就會跟你該說
invalid initialization of reference of type "vector&" from "const vector"
(看吧看吧 就說加了const會機機歪歪的 刪掉不就得了...不行!!)
會出現這樣的error原因在於
我們要求getNameList()這個函式為const method
亦即不可以更動任何data member
但又走後門把
_nameList 用reference傳出去
解決的方法如下,宣告兩種get函式:
vector& getNameList() {
return
_nameList;
}
const vector& getNameList() const {
return
_nameList;
}
大致上這樣
但要講到const的話
又是另一門博大精深的學問了
大致上這樣
但要講到const的話
又是另一門博大精深的學問了
2012年4月2日 星期一
[C++] 你可能會遇到的怪BUG
如果你遇到以下情況:
1) 明明我把完完全全無關僅要的某一行註解掉,可是程式就掛了(媽的莫名其妙)
ex:
// Code part1
...
// Variable a is an unused variable
int a = 10;
// Code part2
...
2) 槓掉後再加些別的程式碼又沒事了(幹)
這時候有很大的可能你用到了garbage value
小心檢查那些會crash的程式碼中
你所用過的所有pointer
確保他們沒有做一些蠢事
比如說拿了garbage還以為有initialize
或是用fread但是destination變數的大小和你要copy的大小根本不一樣之類的
如果還是無法的話
還有一個可能就是
你太衰了XDDD
訂閱:
文章 (Atom)