国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 常量成員常量返回值詳解

2020-01-26 14:06:31
字體:
來源:轉載
供稿:網友

總結:
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);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉黎县| 鄂托克旗| 健康| 西华县| 台前县| 天等县| 临安市| 绥江县| 建平县| 古田县| 新昌县| 凌云县| 西林县| 桐乡市| 延吉市| 基隆市| 大竹县| 平邑县| 时尚| 三穗县| 介休市| 秭归县| 平陆县| 公安县| 泗洪县| 清丰县| 咸丰县| 宁海县| 陇西县| 噶尔县| 大邑县| 通山县| 响水县| 通城县| 屏东县| 三门县| 九江市| 夏邑县| 新蔡县| 克什克腾旗| 武山县|