【C++】類中成員函式聲明後面接 const
const 表示對類中成員函式屬性的宣告;
表示不會修改類中的資料成員;
在編寫const成員函式時,若不慎修改了資料成員,或者呼叫了其他非const成員函式,編譯器將指出錯誤;
以下程式中,類stack的成員函式GetCount僅用於計數,從邏輯上講GetCount應當為const函式。
class Stack { public: void Push(int elem); int Pop(void); intGetCount(void) const; // const 成員函式 private: int m_num; int m_data[100]; }; int Stack::GetCount(void)const { ++ m_num; // 編譯錯誤,企圖修改資料成員m_num Pop();// 編譯錯誤,企圖呼叫非const函式 returnm_num; }
關於const函式的幾點規則:
a:在類中被const宣告的成員函式只能訪問const成員函式,而非const函式可以訪問任意的成員函式,包括const成員函式
b.在類中被const宣告的成員函式不可以修改物件的資料,不管物件是否具有const性質,它在編譯時,以是否修改
成員資料為依據,進行檢查.
c.加上mutable修飾符的資料成員,對於任何情況下通過任何手段都可修改,自然此時的const成員函式是可以修改它的
相關推薦
【C++】類中成員函式聲明後面接 const
const 表示對類中成員函式屬性的宣告; 表示不會修改類中的資料成員; 在編寫const成員函式時,若不慎修改了資料成員,或者呼叫了其他非const成員函式,編譯器將指出錯誤; 以下程式中,類stack的成員函式GetCount僅用於計數,從邏輯上講GetCount應
【C++】類中靜態成員的宣告、初始化
【C++】類中靜態成員的宣告、初始化 類中靜態成員的宣告 初始化 靜態資料成員值的改變 完整例子 有參考大佬 零點零一 的文章: https://blog.csdn.net/thanklife/article/details/784
【C++】類的預設成員函式
1.建構函式 2.拷貝建構函式 3.解構函式、 4.運算子過載---實現一個日期計算器 c++類有6個預設成員函式:建構函式,拷貝建構函式,解構函式,賦值操作符過載。取地址操作符過載,const修飾的取地址操作符過載。其中前四個預設成員函式是我們重點研究物件
【C++】類的六大預設的成員函式 之 解構函式以及建構函式和解構函式的呼叫順序
解構函式 一.解構函式定義 解構函式也是特殊的成員函式,他的作用和建構函式相反。 class Box { public: //建構函式 Box(i
1、【C++】類&物件/建構函式/拷貝建構函式/操作符過載/解構函式
一、C++類 & 物件 C++ 在 C 語言的基礎上增加了面向物件程式設計,C++ 支援面向物件程式設計。類是 C++ 的核心特性,通常被稱為使用者定義的型別。 類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在
C++ 類中成員函式分析
概述之前對成員變數的分佈進行了整理,今天就對成員函式進行整理。 1、非靜態成員函式C++的設計準則之一就是:非靜態成員函式至少和一般的非成員函式的執行效率相同。 為了實現上衣準則,編譯器會對非靜態成員函式進行改進,先看下面的例子: float func(const Point3d* _this) { .
新手學C/C++:C++的類靜態成員函式可以訪問類中的私有成員嗎?為什麼?
類的所有成員函式都可以訪問本類的私有成員,但是靜態成員函式沒有this指標,因此通過 該類的物件作為函式引數,可以顯示訪問該類的私有成員。 測試程式如下: #include <stdio.h> class Demo { private: &n
C++中的const成員函式(函式聲明後加const,或稱常量成員函式)用法詳解
在C++的類定義裡面,可以看到類似下面的定義: 01 class List { 02 private: 03 Node * p_he
【C++】類函式呼叫this
再一次面試中,被問到,函式呼叫時是怎麼知道物件的成員資訊的,用vs除錯了一把:#include "stdafx.h" #include <string> #include <iostr
【轉載】oracle中decode函式用法
1、DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else)。表示假設value 等於if1時,DECODE函式的結果返回then1,...,假設不等於不論什麼一個if值。則返回else 2、該函式的含義例如以下: IF 條件=值1 TH
【C++】類模板(template)
需求:寫一個可變長度的陣列類Array,用於存放若干元素,個數未知 設計:內部動態申請一個buffer capacity:表示buffer的大小 &n
【C++】類的朋友(friend)
我把你當朋友,你就能訪問我的一切(是真的一切);但你不將我當作朋友,我就不能訪問你的一切。 定義與使用 在類A中,用friend關鍵字可以將一個全域性函式宣告為該類的“朋友”,也可以將另一個類宣告為該類的“朋友”。 (1)friend宣告語句:位置自由,一般放在類體大括號的
【C#】——類與物件
一、類和物件的區別 類:類是模型,確定物件將會擁有的特徵(屬性)和行為(方法),類是物件的型別。 類是抽象的概念,僅僅是模板,比如說“人”類 物件是一個能看得到、摸得到的具體實體 物件可以叫做類的例項(Instance) 類不佔記憶體,物件才佔記憶體 二、類的定
【C++】工作中遇到的難點
一,explicit C++ explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的。 建構函式有顯示和隱式之分。建構函式預設的式隱式的,如下: 1. class MyClass 2. { 3. public: 4. MyClass( int num );
c++模板類的成員函式的宣告與定義應該放在標頭檔案裡
今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示
【C++】boost::bind和函式物件一起使用實現便捷的非同步程式設計
在C++面向物件程式設計中,觀察者模式是大家熟知的實現非同步程式設計的一種模式。 觀察者模式定義物件間的一種一對多的依賴關係,以便當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動更新。如下圖所示: 觀察者模式提供了一種物件設計,
【C#】類和結構、棧和堆、值型別和引用型別、里氏替換
目錄 舉例: 一、類和結構的區別: 二、棧和堆的區別: 1.官方解讀: 棧: 是編譯期間就分配好的記憶體空間,因此程式碼中必須就棧的大小有明確的定義; 區域性值型別變數、值型別引數等都在棧的記憶體中。 堆:
【C++】類模板的特化及型別萃取
關於C++模板的初階學習(函式模板和類模板)總結於我的另一篇部落格: https://blog.csdn.net/hansionz/article/details/83827329 類模板的特化及型別萃取 1.非型別模板引數 2.模板的特化 2
【C++】類和物件(4)
一、類的六個預設成員函式 下面是一個Date類,但是它類中什麼成員也沒有,這就是空類。但是它雖然看起來什麼都沒有,實際上不是的,在我們什麼都不寫的情況下,它會自動生成六個預設的成員函式。如圖所示的建構函式、解構函式、拷貝建構函式、賦值過載函式、普通物件取地址函式、const物件取地址函式這六個函
【C++】類和物件(3)—>> this指標
一、this指標的引入 我們在現實中,定義一個類都是根據一個需求來定義的。所以先來看一個常用的日期類 Date 。 class Date { public: void Print() { cout << _year << "-" << _month