1. 程式人生 > >【C++】類中成員函式聲明後面接 const

【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

轉載oracledecode函式用法

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