C++常物件,常變數,常成員函式詳解(含新增內容)
既要使資料能在一定範圍內共享,又要保證它不被任意修改,可使用const。
· 用const修飾的宣告資料成員稱為常資料成員
· 用const修飾的宣告成員函式稱為常成員函式
· 用const修飾的定義物件稱為常物件
變數或物件被const修飾後其值不能被更新。因此被const修飾的變數或物件必須要進行初始化。
(一)用const修飾的宣告資料成員稱為常資料成員
有兩種宣告形式:
const int cctwl;
int const cctwl;
不能省略資料型別,可以新增 public private等訪問控制符。
說明:
1. 任何函式都不能對常資料成員賦值
2. 建構函式對常資料成員進行初始化時也只能通過初始化列表進行。(只有此一種方法)
3. 常資料成員在初始化時必須賦值或稱其必須初始化.
4. 如果類有多個預設建構函式必須都初始化常資料成員。//沒明白
通過下面例子來理解常資料成員以上4點。
這樣也可以給常資料成員num賦值啊,而且可以不同的物件賦不同的值。
A、請指出下面程式的錯誤
錯誤一:不能對常資料成員在類中初始化、要通過類的建構函式,只有靜態常量才能這樣初始化。
錯誤二:沒有合適的預設建構函式可用。因為有常量cctwl沒有初始化必須初始化所有常資料成員。
更正後結果如下:
B、多個建構函式下的常資料成員
請指出下面程式的錯誤:
錯誤一:每個建構函式都要初始化常資料成員,應改為
(親測,這樣是可以的)
(二)用const修飾的宣告宣告成員函式稱為常成員函式
宣告:<型別標誌符>函式名(引數表)const;
說明:
1. const是函式型別的一部分,在實現部分也要帶該關鍵字。
2. const關鍵字可以用於對過載函式的區分。
3. 常成員函式不能更新任何資料成員,也不能呼叫該類中沒有用const修飾的成員函式,只能調用常成員函式和常資料成員。
A、通過例子來理解const是函式型別的一部分,在實現部分也要帶該關鍵字。
(但是我測試的下面的程式可以執行啊,下面的錯誤在哪?似乎正確的,可能作者改過來之後的)
B
C、通過例子來理解常成員函式不能更新任何資料成員
D、通過例子來理解
1、常成員函式可以被其他成員函式呼叫。
2、但是不能呼叫其他非常成員函式。
3、可以呼叫其他常成員函式。
(三)用const修飾的定義物件稱為常物件
常物件是指物件的資料成員的值在物件被呼叫時不能被改變。常物件必須進行初始化,且不能被更新。不能通過常物件呼叫普通成員函式,但是可以通過普通物件呼叫常成員函式。常物件只能呼叫常成員函式。
常物件的宣告如下:
const <類名> <物件名>
<類名> const <物件名>
兩種宣告完全一樣沒有任何區別。
1、通過下面例子來理解常物件:
A、請指出下面程式的錯誤
PS:
· 常成員函式可以引用const資料成員,也可以引用非const的資料成員;
· const資料成員可以被const成員函式引用,也可以被非const的成員函式引用;
· 常成員函式不能呼叫另一個非const成員函式。
記住定義為const後,其值不能改變即可。對於常物件、常成員函式,肯定也不能呼叫能改變其他值得函式。(自己新增)
既要使資料能在一定範圍內共享,又要保證它不被任意修改,這時可以使用const。對於const int *pa,指的是不能通過改變*pa的值來改變pa指向的變數的值,但可以通過改變pa指向的變數的值來改變*pa的值。設定為常引用,還是可以改變實際的值。(但不可用*pa或b來改變a的值)
指向物件的常指標,其指向始終不變。
指向常變數的指標變數:const 型別名 *指標變數名;(把變數換成物件,即指向常物件的指標變數同下)
1、如果一個變數已被宣告為常變數,只能用指向常變數的指標變數指向它,而不能用一般的(指向非const型變數的)指標變數指向它。
2、指向常變數的指標變數除了可以指向常變數外,還可以指向未被宣告為const的變數。此時不能通過此指標變數改變該變數的值
3、如果函式的形參是指向非const型變數的指標,實參只能用指向非const變數的指標,而不能用指向const變數的指標
在C++面向物件程式設計中,經常用常指標和常引用作函式引數。這樣既能保證資料安全,使資料不能被隨意修改,在呼叫函式時又不必建立實參的拷貝。用常指標和常引用作函式引數,可以提高程式執行效率。
相關推薦
C++常物件,常變數,常成員函式詳解(含新增內容)
既要使資料能在一定範圍內共享,又要保證它不被任意修改,可使用const。 · 用const修飾的宣告資料成員稱為常資料成員 · 用const修飾的宣告成員函式稱為常成員函式 · 用const修飾的定義物件稱為常物件 變數或物件被c
C++常物件,常變數,長成員函式詳解(轉)
用const修飾的宣告資料成員稱為常資料成員用const修飾的宣告成員函式稱為常成員函式用const修飾的定義物件稱為常物件 變數或物件被const修飾後其值不能被更新。因此被const修飾的變數或物件必須要進行初始化。(一)用const修飾的宣告資料成員稱為常資料成員
當同時安裝Python2和Python3後,如何兼容並切換使用詳解(比如pip使用)
err 完美解決 執行文件 class 需要 提示 改名 launcher 順序查找 由於歷史原因,Python有兩個大的版本分支,Python2和Python3,又由於一些庫只支持某個版本分支,所以需要在電腦上同時安裝Python2和Python3,因此如何讓兩個版
佇列實現棧,兩個佇列實現一個棧方法詳解(含實現程式碼)
本節介紹一下如何用兩個佇列實現棧。 棧的主要操作就是入棧和出棧,其特點就是後進先出。我們先將兩個佇列分別定義為 queue1 與 queue2。 方案 1 入棧和出棧,都在 queue1 中完成,而 queue2 作為中轉空間。 入棧:直接入 queue1 即可。 出棧:把 queue1 中除最後一
棧實現佇列,用兩個棧實現佇列方法詳解(含實現程式碼)
棧怎樣才能實現和佇列一樣從棧的底層抽出元素呢?一般會用兩個棧來實現佇列。 首先,我們將兩個棧分別定義為 stack1 與 stack2。 實現方案 1 我們讓入隊操作在 stack1 中執行,而出隊操作在 stack2 中執行。執行方式如下。 入隊:直接向 stack1 中入棧。 出隊:將 stac
C/C++高精度運算(大整數運算)詳解(含壓位)
1.高精度加法1.1 高精度加法 高精度運算的基本運算就是加和減。和算數的加減規則一樣,模擬豎式計算,考慮錯位運算與進位處理。下面是我老師給的程式碼,目前比網上其他的程式碼要精簡和巧妙。#include <cstdio> #include <c
C++繼承詳解之二——派生類成員函式詳解(函式隱藏、建構函式與相容覆蓋規則)
在這一篇文章開始之前,我先解決一個問題。 在上一篇C++繼承詳解之一——初探繼承中,我提到了在派生類中可以定義一個與基類成員函式同名的函式,這樣派生類中的函式就會覆蓋掉基類的成員函式。 在譚浩強的C++程式設計這本書第十一章,351頁最下面有這麼
C++之常物件、常成員變數與常成員函式詳解
一、常物件說明:常物件是指物件的資料成員的值在物件被呼叫時不能被改變。常物件必須進行初始化,且能被更新。不能通過常物件呼叫普通成員函式,但是可以通過普通物件呼叫常成員函式。常物件只能呼叫常成員函式
Linux基本常用命令之ls詳解(含date,cal)
Linux基礎【1】顯示日期的指令:date示例:(1)#date +%Y/%m/%d結果:2018/02/27(2)#date +%H:%M結果:10:48【2】顯示日歷的指令:cal格式:cal [month] [year]示例:(1)#cal 2 2018(2)#cal 13 2018結果:cal:il
malloc和free函式詳解(轉載只是為了查閱方便,若侵權立刪)
malloc和free函式詳解 本文介紹malloc和free函式的內容。 在C中,對記憶體的管理是相當重要。下面開始介紹這兩個函式: 一、malloc()和free()的基本概念以及基本用法: 1、函式原型及說明: void *malloc(lon
scala-val物件例項化變數卻可以更改之深度解析(小白適用)
類和物件可能都很熟悉了,這裡僅供小白參考,大神請虐過。一開始學的時候物件是類的藍圖,啥,藍圖,什麼鬼?我們直接看程式碼吧~ import scala.io.Source class ChecksumAccumulator(){ var sum = 0 }
當同時安裝Python2和Python3後,如何相容並切換使用詳解(比如pip使用)
由於歷史原因,Python有兩個大的版本分支,Python2和Python3,又由於一些庫只支援某個版本分支,所以需要在電腦上同時安裝Python2和Python3,因此如何讓兩個版本的Python相容,如何讓指令碼在對應的Python版本上執行,這個是值得總結的。對於Ubu
同時安裝Python2和Python3,如何相容並切換使用詳解(比如pip使用)
對於Ubuntu 16.04 LTS版本來說,Python2(2.7.12)和Python3(3.5.2)默認同時安裝,預設的python版本是2.7.12。 用python2時,輸入:python2;用python3時,輸入:python3 對於
Jvm堆記憶體的劃分結構和優化,垃圾回收詳解(詳細解答篇)
1.S0與S1的區間明顯較小,有效新生代空間為Eden+S0/S1,因此有效空間就大,增加了記憶體使用率 2.有利於物件代的計算,當一個物件在S0/S1中達到設定的XX:MaxTenuringThreshold值後,會將其分到老年代中,設想一下,如果沒有S0/S1,直接分成兩個區,該如何計算物件經過了多少次G
C#漢字轉換拼音技術詳解(高性能)
rim none pie 存在 asp pub net 如果 pinyin public static class ChineseToPinYin { private static readonly Dictionary<<span class=
C/C++ typedef用法詳解(真的很詳細)
是p2++出錯了。這個問題再一次提醒我們:typedef和#define不同,它不是簡單的文字替換。上述程式碼中const pStr p2並不等於const char * p2。const pStr p2和const long x本質上沒有區別,都是對變數進行只讀限制,只不過此處變數p2的資料型別是我們自
C語言中二維陣列名與陣列地址、首行地址、首行首元素地址關係與區別詳解(初學者必須掌握)
C語言作為很多大學理工科都會學習的語言,作為一種程式設計入門語言。但是相對於其他高階程式語言來說相對是比較難,尤其是指針,不知道有多少莘莘學子都是因為它,從C語言入門到放棄。想當年,筆者在大一學習C語言
nginx 的安裝和gcc gcc-c++配置詳解(新手必看)
首先玩linux的話, gcc gcc-c++,fast-cgi,wget,yum 這些包請確保已經安裝好了, #下載nginx openssl,pcre,zlib wget http://nginx.org/download/nginx-1.12.0.tar.gz&nb
C++檔案讀寫詳解(ofstream,ifstream,fstream)
在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: #include <fstream> ofstrea
C程式中對時間的處理——time庫函式詳解
功 能:將時間格式化,或者說:格式化一個時間字串。我們可以使用strftime()函式將時間格式化為我們想要的格式。 原 型:size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timept