標籤

C++ (12) Linux (6) MacOSX (4) Makefile (3) Matlab (3) Ubuntu (3) Android (2) C (1) Refactoring (1)

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的話
又是另一門博大精深的學問了

沒有留言:

張貼留言