您好,登錄后才能下訂單哦!
總結:
1.常量數據成員,形式:const Type m_tData;
1)常量數據成員,需要在構造函數列表中給出,構造函數中可以用常量賦值,也可以實例化的時候賦值。
2)賦值函數中不能賦值,起到保護常量數據成員的作用,和友元作用相反。
2.常量成員函數,形式:type funname(type1 arg1,type2 arg2,...) const
1)常量成員函數,不能修改類數據成員,不能調用非常量函數。
2)常量成員函數的作用,可以有效的將類的函數分為可以修改類的函數,和不能修改類的函數;以后應該善于使用常量成員函數。
3.返回常量的函數,可以是常量指針,指針常量,常量,形式:
const type* funcname(type1 arg1,type2 arg2, ..)
type* const funcname(type1 arg1,type2 arg2, ..)
const funcname(type1 arg1,type2 arg2, ..)
他們的返回類型對于使用不是重要的,重要的是賦給的對象的類型決定了后續能夠進行的操作。
常量指針和指針常量都可以賦值給常量指針對象,常量指針對象可以進行p++操作,不能進行*p操作。
常量指針和指針常量都可以賦值給指針常量,但是指針常量只能進行*p操作,不能進行p++操作。
普通類型的返回常量的函數,目的是為了讓成員函數返回值之間不能進行運算,防止產生丑陋的代碼,
返回值是常量的函數,說明該類內的這個值是外部使用者不能輕易改變的, 可以讓類的聲明的含義更加貼切,更加易于理解。
#include "stdafx.h" #include <iostream> using namespace std; class CTest { public: CTest(int nid, int nlimit):m_cntLimit(nlimit) { //m_cntLimit = nlimit;// 常量成員必須在構造函數列表在中給出 m_nId = nid; } ~CTest(){}; int GetID() const { //m_nId++;常量成員函數不能修改對象 //ClientGetObj();常量成員函數不能調用非常量成員函數 return m_nId; } CTest operator =(const CTest &b) { this->m_nId = b.m_nId; //this->m_cntLimit = b.m_cntLimit;// 常量數據成員不能拷貝 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());// 常量指針對象,不能進行*p操作,可以進行p++操作 while(1); }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。