轉(zhuǎn)帖|其它|編輯:郝浩|2010-09-08 18:02:51.000|閱讀 604 次
概述:前幾天在看C++視頻教程的時候提到了一個const函數(shù),個人覺得const函數(shù)簡單一點(diǎn)說就是在函數(shù)體內(nèi)不能修改類的成員,在C#里面是沒有這個說法的,在此記錄一下!希望對大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
前幾天在看C++視頻教程的時候提到了一個const函數(shù),個人覺得const函數(shù)簡單一點(diǎn)說就是在函數(shù)體內(nèi)不能修改類的成員,在C#里面是沒有這個說法的,在此記錄一下!以后寫C++代碼待注意了,凡是不用修改類的成員的函數(shù)盡量定義為const函數(shù)!比如在取成員變量的值的時候,這樣也可以盡量避免bug,而且是在編譯的時候就不能通過!
另外就是const函數(shù)是不能調(diào)用非const函數(shù)的,即是是哪個非const函數(shù)體內(nèi)沒有修改成員變量的值也不行!例如下面的代碼編譯會不通過:
代碼
#include<iostream>
using namespace std;
class studentInfo
{
public:
void setScore(int score){this->score=score;}
int getScore() const{printScore();return score;}
void printScore(){cout<<score<<endl;}
private:
int score;
};
int main(void)
{
return -1;
}
如果非要在const成員函數(shù)里面修改成員變量的話該怎么做了?上網(wǎng)查了一下主要有一下兩種方法:
1. 通過this指針進(jìn)行類型強(qiáng)制轉(zhuǎn)換實(shí)現(xiàn)
類似于下面這樣的方法:
int getScore() const
{
(const_cast<studentInfo*>(this))->score+=1;
return score;
}
2. 將成員變量定義為mutable
類似于下面這樣:
mutable int score;
上面這句代碼就告訴編譯器成員變量r可以在const函數(shù)體內(nèi)修改其值!
其實(shí)我覺得既然我們已經(jīng)將函數(shù)定義為const了就沒有必要再在函數(shù)體內(nèi)修改成員變量的值了,不然就失去const函數(shù)的意義了,也就沒必要將其定義為const函數(shù)!個人意見!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載