const變量的基礎:(這里給出一個小例子)
const *p://*p不可以改 int *const p;//p不可以改 const int *const p//二者都不可以改
正文:
在C++中,只有被聲明為const的成員函數才能被一個const類對象調用。
要聲明一個const類型的類成員函數,只需要在成員函數參數列表后加上關鍵字const,例如,
class Screen {
public:
char get() const;
};
在類體之外定義const成員函數時,還必須加上const關鍵字,例如
char Screen::get() const {
return _screen[_cursor];
}
若將成員成員函數聲明為const,則該函數不允許修改類的數據成員。例如,
class Screen {
public:
int a;
public:
Screen()
{
a=0;
}
void ok() const
{
a=1;//錯誤
}
};
下面的這個例子比較經典:
int a=0;
const int *p=&a;//把一個可以修改的變成不可以修改的----正確
const int b=100;
int *p=&b; //把一個不可以修改的變成可以修改了----錯誤
總結:
1.const成員函數可以訪問const成員變量和普通成員變量,但不能修改任何變量。檢查發生在編譯時。
普通函數可訪問const成員變量,不可以修改。.(在訪問的時候會自動轉成const的)
(成員函數和變量之間都是可訪問不可以修改)
2.const對象只能訪問const成員函數,
(const對象只可訪問const的,也只可以被const的訪問)
3.const對象的成員變量不可以修改。
4.const成員函數不能調用非const成員函數,因為非const成員函數可以會修改成員變量
5.普通成員函數可以訪問非const對象的普通數據成員、const數據成員,但不可以訪問const對象的任意數據成員。(除了此點外,普通的都可以訪問const的)
6.const成員函數只是用於非靜態成員函數,不能用於靜態成員函數。
7.const成員函數的const修飾不僅在函數聲明中要加(包括內聯函數),在類外定義出也要加。
8.作為一種良好的編程風格,在聲明一個成員函數時,若該成員函數並不對數據成員進行修改操作,應盡可能將該成員函數聲明為const 成員函數。
參考資料: