微信公眾號:「小林coding」
用簡潔的方式,分享編程小知識,
01 常量物件
如果不希望某個物件的值被改變,則定義該物件的時候可以在前面加const關鍵字
class CTest
{
public:
void SetValue() {}
private:
int m_value;
};
const CTest obj; // 常量物件
02 常量成員函式
在類的成員函式后面可以加const關鍵字,則該成員函式成為常量成員函式,
- 在常量成員函式中不能修改成員變數的值(靜態成員變數除外);
- 也不能呼叫同類的 非 常量成員函式(靜態成員函式除外)
class Sample
{
public:
void GetValue() const {} // 常量成員函式
void func(){}
int m_value;
};
void Sample::GetValue() const // 常量成員函式
{
value = https://www.cnblogs.com/xiaolincoding/p/0; // 出錯
func(); // 出錯
}
int main()
{
const Sample obj;
obj.value = 100; // 出錯,常量物件不可以被修改
obj.func(); // 出錯,常量物件上面不能執行 非 常量成員函式
obj.GetValue // OK,常量物件上可以執行常量成員函式
return 0;
}
03 常量成員函式的多載
兩個成員函式,名字和引數表都一樣,但是一個是const,一個不是,那么是算是多載,
class Sample
{
public:
Sample() { m_value = https://www.cnblogs.com/xiaolincoding/p/1; }
int GetValue() const { return m_value; } // 常量成員函式
int GetValue() { return 2*m_value; } // 普通成員函式
int m_value;
};
int main()
{
const Sample obj1;
std::cout << "常量成員函式 " << obj1.GetValue() << std::endl;
Sample obj2;
std::cout << "普通成員函式 " << obj2.GetValue() << std::endl;
}
執行結果:
常量成員函式 1
普通成員函式 2
04 常參考
參考前面可以加const關鍵字,成為常參考,不能通過常參考,修改其參考的變數的,
const int & r = n;
r = 5; // error
n = 4; // ok!
物件作為函式的引數時,生產該物件引數是需要呼叫復制建構式的,這樣效率就比較低,用指標作為引數,代碼又不好看,如何解決呢?
可以用物件的參考作為引數,防止引發復制建構式,如:
class Sample
{
...
};
void Func(Sample & o) // 物件的參考作為引數
{
...
}
但是有個問題,物件參考作為函式的引數有一定的風險性,若函式中不小心修改了形參0,則實參也會跟著變,這可能不是我們想要的,如何避免呢?
可以用物件的常參考作為引數,如:
class Sample
{
...
};
void Func(const Sample & o) // 物件的常參考作為引數
{
...
}
這樣函式中就能確保不會出現無意中更改o值的陳述句了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84926.html
標籤:C++
上一篇:C++ static靜態成員

