目錄
- 前言:
- 1.const修飾類的成員函式
- 2..取地址及const取地址運算子多載
- 后記
前言:
hello,大家好,今天我們來繼續更新關于C++的博客,今天我們來介紹const成員,閑言少敘,讓我們開始吧,
1.const修飾類的成員函式
將const修飾的類成員函式稱之為const成員函式,const修飾類成員函式,實際修飾該成員函式隱含的this指標,表明在該成員函式中不能對類的任何成員進行修改,

也就是說,被const修飾的成員函式是不可修改的,這實際起的是一種保護作用,防止資料被意想不到的原因篡改,
const修飾類物件表示該物件為常量物件,其中的任何成員都不能被修改,對于物件指標和物件參考也是一樣,
const修飾的物件,該物件的任何非const成員函式都不能被呼叫,因為任何非const成員函式會有修改成員變數的企圖,
class A
{
…
void function()const; //常成員函式, 它不改變物件的成員變數.
//也不能呼叫類中任何非const成員函式,
}
class
{
public:
void fun() const //加const修飾
{
a = 10; //出錯,不可修改非static變數
b = 10; //對,可以修改
}
private:
int a ;
static int b;
}
所以,我們建議盡可能將不再需要改變的函式設為const,這樣可以很好地對函式進行保護,
那么我們來思考幾個問題:
- const物件可以呼叫非const成員函式嗎?
- 非const物件可以呼叫const成員函式嗎?
- const成員函式內可以呼叫其它的非const成員函式嗎?
- 非const成員函式內可以呼叫其它的const成員函式嗎?
對于問題1,顯然是不可以的,const是不可修改的,非const是可以修改的,讓const去呼叫非const,相當于權限的擴大,這肯定是不可以的,就像是班主任管一個班,而校長管一個學校,而班主任是無權掌管整個學校的,
那么我們可以根據第一個問題推出第二個是可以的,因為校長是有權管某個班的,還記得中學時期你們班在自習課的時候鬧地熱火朝天的時候,西裝革履的校長推門而入將你們班一通教訓順便叫來班主任一起教訓嗎?

對于第三個問題和第四個問題,明確一點,編譯器處理后,const修飾的成員函式中,在成員前面都會加this->,在這里,成員包括成員變數和成員函式,于是我們可以知道,答案和第一道題第二道題是類似的,第三道題是錯誤的,第四道題是正確的,
2…取地址及const取地址運算子多載
這兩個默認成員函式一般不用重新定義 ,編譯器默認會生成,
class Date
{
public :
Date* operator&()
{
return this ;
}
const Date* operator&()const
{
return this ;
}
private :
int _year ; // 年
int _month ; // 月
int _day ; // 日
};
這兩個運算子一般不需要多載,使用編譯器生成的默認取地址的多載即可,只有特殊情況,才需要多載,比如想讓別人獲取到指定的內容,

后記
好的,今天我們的分享很簡短,希望對你有所幫助,今天我們文章的題目是“保護者”,說到保護,想起了《少年的你》里的經典臺詞,“你保護世界,我保護你”希望你在生活中可以有const來保護你,你也能做別人的const,最后,我們來分享一首詩:
遠方的燈火將山城
一片片剝落
你憂傷時見你
我憂傷時見我
月光揮舞著霧氣
流向人間的薄淡
這顏色
你憂傷時不見
我見時無我
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293292.html
標籤:其他
下一篇:搭建Nginx正向代理服務
