中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-25 01:57:27 來源:腳本之家 閱讀:483 作者:Jason-Cen 欄目:編程語言

總結:
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);
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普安县| 太和县| 开原市| 油尖旺区| 海丰县| 晋宁县| 沙湾县| 和林格尔县| 沁源县| 开远市| 得荣县| 古田县| 桦南县| 中西区| 云南省| 嘉荫县| 通山县| 武山县| 蓬安县| 陵川县| 常山县| 冷水江市| 应用必备| 成武县| 双峰县| 板桥市| 策勒县| 米脂县| 新晃| 民勤县| 喀什市| 霍邱县| 通河县| 西盟| 霍城县| 凌云县| 万年县| 普兰店市| 彭阳县| 简阳市| 土默特左旗|