1. 程式人生 > >C++中const的使用常物件和長物件成員

C++中const的使用常物件和長物件成員

有關常物件和常物件成員
在c++程式設計中如果要讓所編的程式更安全,就要用到一些保護機制。


常物件
即物件中的所有資料成員在引用時不能被改變的物件。定義如下:
class Student{
public:
int a;
int b;
int c;
public:
Student(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
}
void display()
{
cout<<a<<" "<<b<<" "<<c<<" "<<endl;
}
}; 


Student stu1(1,2,3);
const Student stu2(3,4,5);


stu1.display();//可以執行


stu2.display();//編譯錯誤


在定義了一個長物件後,如果成員函式要引用常物件中的成員,則引用常物件成員的成員函式必須在宣告類時被宣告成常函式,常函式只能引用成員的值而無法修改成員的值。在函式被宣告為常函式後,在引用成員變數時,就會確保在函式執行過程中不會修改成員變數的值,保證了物件資料成員的的安全。
注意:長物件只能呼叫常成員函式而不能呼叫非常成員函式。


那麼在常物件中真的一點也無法改變其中的成員變數嗎?
當然不是,如果必須要修改長物件中成員變數的值可以在宣告相應的類的時候用mutable關鍵字修飾你想在使用物件過程中要改變的成員變數,如:
mutalble int count;
那麼在隨後的使用物件過程中可以通過const修飾的成員函式修改count的值;


/////////////////////////////////////////////
常資料成員

常資料成員在宣告類時在成員前加const關鍵字
如:
const int hour;
常資料成員通過建立物件時由建構函式初始化,在物件建立後 其值將不可改變。而通過建構函式初始化時只能通過初始化列表進行初始化,不能在函式體內部通過賦值語句進行初始化,因為常成員變數是不能被賦值的。
如:
Time::Time(int h):hour(h){};//正確,通過初始化列表初始化成員變數


Time::Time(int h)
{
//hour=h; //錯誤
}