C++ 常量成員常量返回值詳解
總結(jié):
1.常量數(shù)據(jù)成員,形式:const Type m_tData;
1)常量數(shù)據(jù)成員,需要在構(gòu)造函數(shù)列表中給出,構(gòu)造函數(shù)中可以用常量賦值,也可以實(shí)例化的時(shí)候賦值。
2)賦值函數(shù)中不能賦值,起到保護(hù)常量數(shù)據(jù)成員的作用,和友元作用相反。
2.常量成員函數(shù),形式:type funname(type1 arg1,type2 arg2,...) const
1)常量成員函數(shù),不能修改類數(shù)據(jù)成員,不能調(diào)用非常量函數(shù)。
2)常量成員函數(shù)的作用,可以有效的將類的函數(shù)分為可以修改類的函數(shù),和不能修改類的函數(shù);以后應(yīng)該善于使用常量成員函數(shù)。
3.返回常量的函數(shù),可以是常量指針,指針常量,常量,形式:
const type* funcname(type1 arg1,type2 arg2, ..)
type* const funcname(type1 arg1,type2 arg2, ..)
const funcname(type1 arg1,type2 arg2, ..)
他們的返回類型對(duì)于使用不是重要的,重要的是賦給的對(duì)象的類型決定了后續(xù)能夠進(jìn)行的操作。
常量指針和指針常量都可以賦值給常量指針對(duì)象,常量指針對(duì)象可以進(jìn)行p++操作,不能進(jìn)行*p操作。
常量指針和指針常量都可以賦值給指針常量,但是指針常量只能進(jìn)行*p操作,不能進(jìn)行p++操作。
普通類型的返回常量的函數(shù),目的是為了讓成員函數(shù)返回值之間不能進(jìn)行運(yùn)算,防止產(chǎn)生丑陋的代碼,
返回值是常量的函數(shù),說(shuō)明該類內(nèi)的這個(gè)值是外部使用者不能輕易改變的, 可以讓類的聲明的含義更加貼切,更加易于理解。
#include "stdafx.h"
#include <iostream>
using namespace std;
class CTest
{
public:
CTest(int nid, int nlimit):m_cntLimit(nlimit)
{
//m_cntLimit = nlimit;// 常量成員必須在構(gòu)造函數(shù)列表在中給出
m_nId = nid;
}
~CTest(){};
int GetID() const
{
//m_nId++;常量成員函數(shù)不能修改對(duì)象
//ClientGetObj();常量成員函數(shù)不能調(diào)用非常量成員函數(shù)
return m_nId;
}
CTest operator =(const CTest &b)
{
this->m_nId = b.m_nId;
//this->m_cntLimit = b.m_cntLimit;// 常量數(shù)據(jù)成員不能拷貝
return (*this);
}
int ClientGetID()
{
return GetID();
}
CTest* const GetObj()
{
return this;
}
CTest* ClientGetObj()
{
return this;
}
const int GetID()
{
return m_nId;
}
void Print()
{
cout<<"m_nId:"<<m_nId<<", const m_cntLimit"<<m_cntLimit<<endl;
}
void PrintCnt() const
{
cout<<"m_nId:"<<m_nId<<", const m_cntLimit"<<m_cntLimit<<endl;
}
private:
int m_nId;
const int m_cntLimit;
};
void main()
{
CTest Obj1(1, 1000);
CTest Obj2(2, 2000);
CTest* pObj = Obj1.ClientGetObj();
pObj->Print();
CTest objTemp = *(Obj1.ClientGetObj());
*pObj = *(Obj2.ClientGetObj());
pObj->Print();
// reset
*pObj = objTemp;
cout<<"-------------const display---------------"<<endl;
/*const */CTest* const pCntObj = Obj1.GetObj();//常量指針和指針常量都可以賦值給常量指針
pCntObj->PrintCnt();
*pCntObj = *(Obj2.GetObj());
pCntObj->PrintCnt();
/*const */int nid = pCntObj->GetID();// 常量返回值可以賦值給變量
nid++;
cout<<"new nid is:"<<nid<<endl;
//*pCntObj = *(Obj1.GetObj());// 常量指針對(duì)象,不能進(jìn)行*p操作,可以進(jìn)行p++操作
while(1);
}
相關(guān)文章
C++開發(fā):為什么多線程讀寫shared_ptr要加鎖的詳細(xì)介紹
本篇文章介紹了,在C++中為什么多線程讀寫shared_ptr要加鎖的詳細(xì)說(shuō)明。需要的朋友參考下2013-04-04
C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)使用示例詳解
這篇文章主要為大家介紹了C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
C++中默認(rèn)無(wú)參構(gòu)造函數(shù)的工作機(jī)制淺析
構(gòu)造函數(shù)主要作用在于創(chuàng)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對(duì)象銷毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一些清理工作2023-02-02
如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器詳解
這篇文章主要給大家介紹了關(guān)于如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
C++詳解默認(rèn)參數(shù)的構(gòu)造函數(shù)及簡(jiǎn)單實(shí)例代碼
這篇文章主要介紹了 C++詳解默認(rèn)參數(shù)的構(gòu)造函數(shù)及簡(jiǎn)單實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02

