程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中的常對象與常對象成員詳解

C++中的常對象與常對象成員詳解

編輯:關於C++

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成員函數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved