C++中的常對象與常對象成員詳解。本站提示廣大學習愛好者:(C++中的常對象與常對象成員詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中的常對象與常對象成員詳解正文
常對象
常對象必需在界說對象時就指定對象為常對象。
常對象中的數據成員為常變量且必需要有初始值,如
Time const t1(12,34,36); //界說t1為常對象
如許的話,在一切的場所中,對象t1中的一切數據成員的值都不克不及被修正。凡願望包管數據成員不被轉變的對象,可以聲明為常對象。
界說常對象的普通情勢為
類名 const 對象名(實參列表);
也能夠把const寫在最左面
const 類名 對象名(實參列表);
兩者等價
假如一個對象被聲明為常對象,則不克不及挪用該對象的非const型的成員函數(除由體系主動挪用的隱式結構函數和析構函數)。
不然就會報錯
如許做是為了方法非const型的成員函數修正常對象中的數據成員的值,由於const型的成員函數是弗成以修正對象中的數據成員的值的(這個前面還會說到)。
那末,如何能力援用常變量中的數據成員呢?很簡略,我們只須要將該成員函數聲明稱const型的成員函數(常成員函數)便可。
void Print() const;
常成員函數可以拜訪常對象中的數據成員,但依然不許可修正常對象中數據成員的值。
有時在編程時有請求,必定要修正常對象成員中的某個數據成員的值(例如類中有一個用於計數的變量count,其值應該不克不及變更),
對該數據成員聲明為mutable,如
mutable int count;//界說一個在常對象中可以被轉變的數據成員
把count聲明為可變的數據成員,如許便可以用聲明為const的成員函數來修正它的值。
=========================一個簡略的示例法式1.1====================================
#include<iostream>
using namespace std;
class Student
{
<span > </span>public:
<span > </span>Student(int n,float s):num(n),score(s){}
<span > </span>void change(int n,float s) const{num=n;score=s;}
<span > </span>void display() const{cout<<num<<"\t"<<score<<endl;}
<span > </span>private:
<span > </span>mutable int num;
<span > </span>mutable float score;
} ;
int main()
{
<span > </span>Student const stud(101,78.5);
<span > </span>stud.display();
<span > </span>stud.change(101,80.5);
<span > </span>stud.display();
<span > </span>return 0;
};
我們界說了常對象stud,然後分離挪用了兩個常函數display()和change(),然則在change函數中要修正常對象中的num和score的值,所以我們將num和score界說為mutable.
常對象成員
1.常數據成員
其感化和用法與普通常變量類似,用症結字const來聲明常數據成員。常數據成員的值是不克不及轉變的。
只能經由過程結構函數的參數初始化表對常數據成員停止初始化。
在類體中聲明常數據成員
const int num;//聲明hour為常數據成員
在類外界說結構函數
Student::Student(int n,float s):num(n),score(s){} //經由過程參數初始化表對常數據成員num和score初始化
在類體中聲清楚明了某一個數據成員為常數據成員後,該類一切對象中的該數據成員的值都是不克不及轉變的,但分歧對象中該變量成員的值可所以分歧的(分離在初始化時指定)。
2.常成員函數
假如將成員函數聲明為常成員函數,則只能援用本類中的數據成員,而不克不及修正它們。
留意:常對象只能援用常成員函數
常成員函數的界說情勢:
void Print() const;//留意const的地位在函數名和括號以後
const是函數類型的一部門,在聲明函數和界說函數都要有const症結字,在挪用時不用加const。
常成員函數可以const數據成員,也能夠援用非const數據成員,然則都不克不及修正他們;
不是常成員函數的函數可以挪用const數據成員,然則不克不及修正它們,也能夠挪用非const數據成員,而且可以修正它們。
詳細情形,如圖1:
還要留意一下三點:
1.不要誤以為常對象中的成員函數都是常成員函數,常對象只包管其一切數據成員的值不被修正。
2.假如在常對象中的成員函數未加const聲明,則編譯體系會把它當最非const成員函數處置。
3.還要留意,常成員函數不克不及挪用別的一個非cosnt成員函數。