C++: C++函數聲明的時候后面加const

C++: C++函數聲明的時候后面加const

轉自:http://blog.csdn.net/zhangss415/article/details/7998123

非靜態成員函數后面加const(加到非成員函數或靜態成員后面會產生編譯錯誤),表示成員函數隱含傳入的this指針為const指針,決定了在該成員函數中,任意修改它所在的類的成員的操作都是不允許的(因為隱含了對this指針的const引用);唯一的例外是對于mutable修飾的成員。加了const的成員函數可以被非const對象和const對象調用,但不加const的成員函數只能被非const對象調用。例如:?

復制代碼
 1 class A { 2     private: int m_a; 3     public: 4         A() : m_a(0) {} 5          int getA() const  { 6              return m_a; //同return this->m_a;。7          } 8          int GetA() { 9              return m_a; 
10          } 
11          int setA(int a) const { 
12              m_a = a; //這里產生編譯錯誤,如果把前面的成員定義int m_a;改為mutable int m_a;就可以編譯通過。 
13          } 
14          int SetA(int a)  { 
15              m_a = a; //同this->m_a = a;
16          } 
17 }; 
18 A a1; 
19 const A a2; 
20 int t; 
21 t = a1.getA(); 
22 t = a1.GetA(); 
23 t = a2.getA(); 
24 t = a2.GetA(); //a2是const對象,                    
復制代碼

調用非const成員函數產生編譯錯誤。 一般對于不需修改操作的成員函數盡量聲明為const成員函數,以防止產生const對象無法調用該成員函數的問題,同時保持邏輯的清晰。

?

補充:

c++ 在函數后加const的意義:我們定義的類的成員函數中,常常有一些成員函數不改變類的數據成員,也就是說,這些函數是"只讀"函數,而有一些函數要修改類數據成員的值。如果把不改變數據成員的函數都加上const關鍵字進行標識,顯然,可提高程序的可讀性。其實,它還能提高程序的可靠性,已定義成const的成員函數,一旦企圖修改數據成員的值,則編譯器按錯誤處理。 const成員函數和const對象 實際上,const成員函數還有另外一項作用,即常量對象相關。對于內置的數據類型,我們可以定義它們的常量,用戶自定義的類也一樣,可以定義它們的常量對象。
 

1、非靜態成員函數后面加const(加到非成員函數或靜態成員后面會產生編譯錯誤)?2、表示成員函數隱含傳入的this指針為const指針,決定了在該成員函數中,??? ?任意修改它所在的類的成員的操作都是不允許的(因為隱含了對this指針的const引用);?3、唯一的例外是對于mutable修飾的成員。??? ?加了const的成員函數可以被非const對象和const對象調用??? ?但不加const的成員函數只能被非const對象調用

char getData()?const{ ?? ??? ?return this->letter;

}

?

c++ 函數前面和后面 使用const 的作用:

前面使用const 表示返回值為const

后面加 const表示函數不可以修改class的成員

請看這兩個函數

const int getValue();

int getValue2() const;

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
?* FunctionConst.h
?*/

#ifndef FUNCTIONCONST_H_
#define FUNCTIONCONST_H_

class?FunctionConst?{
public:
? ??int?value;
? ? FunctionConst();
? ??virtual?~FunctionConst();
? ??const?int?getValue();
? ??int?getValue2()?const;
};

#endif /* FUNCTIONCONST_H_ */

源文件中的實現

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
?* FunctionConst.cpp?
?*/

#include "FunctionConst.h"

FunctionConst::FunctionConst():value(100)?{
? ??// TODO Auto-generated constructor stub

}

FunctionConst::~FunctionConst()?{
? ??// TODO Auto-generated destructor stub
}

const?int?FunctionConst::getValue(){
? ??return?value;//返回值是 const, 使用指針時很有用.
}

int?FunctionConst::getValue2()?const{
? ??//此函數不能修改class FunctionConst的成員函數 value
? ? value?=?15;//錯誤的, 因為函數后面加 const
? ??return?value;
}

?

分類:?C++學習筆記

轉載于:https://www.cnblogs.com/tsh292278/p/10470628.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249530.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計蒜客習題】消除字符串

問題描述 蒜頭君喜歡中心對稱的字符串,即回文字符串。現在蒜頭君手里有一個字符串 SS,蒜頭君每次都會進行這樣的操作:從 SS 中挑選一個回文的子序列,將其從字符串 SS 中去除,剩下的字符重組成新的字符串 SS。 蒜頭君想…

HierarchicalBeanFactory

BeanFactory分層 package org.springframework.beans.factory;//分層工廠 public interface HierarchicalBeanFactory extends BeanFactory {//返回工廠的父工廠BeanFactory getParentBeanFactory();//這個工廠中是否包含這個Beanboolean containsLocalBean(String name); }測…

Training a classifier

你已經學習了如何定義神經網絡,計算損失和執行網絡權重的更新。 現在你或許在思考。 What about data? 通常當你需要處理圖像,文本,音頻,視頻數據,你能夠使用標準的python包將數據加載進numpy數組。之后你能夠轉換這些…

19歲白帽子通過bug懸賞賺到一百萬美元--轉

出處:https://news.cnblogs.com/n/620858/ 19 歲的 Santiago Lopez 通過 bug 懸賞平臺 HackerOne 報告漏洞,成為第一位通過 bug 懸賞賺到一百萬美元的白帽子黑客。他的白帽子生涯始于 2015 年,至今共報告了超過 1600 個安全漏洞。他在 16 歲時…

代碼分層的設計

分層思想,是應用系統最常見的一種架構模式,我們會將系統橫向切割,根據業務職責劃分。MVC 三層架構就是非常典型架構模式,劃分的目的是規劃軟件系統的邏輯結構便于開發維護。MVC:英文即 Model-View-Controller&#xff…

【24小時內第四更】為什么我們要堅持寫博客?

前言 從2018年7月份,我開始了寫作博客之路。開始之前,我打算分享下之前的經歷。去年初公司來了個架構師,內部分享過docker原理,TDD單元測試驅動,并發并行異步編程等內容,讓我著實驚呆了,因為確實…

sqoop快速入門

轉自http://www.aboutyun.com/thread-22549-1-1.html 轉載于:https://www.cnblogs.com/drjava/p/10473297.html

ListableBeanFactory接口

ListableBeanFactory獲取bean時,Spring 鼓勵使用這個接口定義的api. 還有個Beanfactory方便使用.其他的4個接口都是不鼓勵使用的. 提供容器中bean迭代的功能,不再需要一個個bean地查找.比如可以一次獲取全部的bean(太暴力了),根據類型獲取bean.在看SpringMVC時,掃描包路徑下的…

HDU 4035 Maze

Maze http://acm.hdu.edu.cn/showproblem.php?pid4035 分析: 在樹上走來走去,然后在一個點可以k的概率回到1,可以e的概率走出去,可以1-k-e的概率走到其他的位置(分為父節點和子節點討論)。 轉移方程就是&a…

面向對象之三大特性:繼承,封裝,多態

python面向對象的三大特性:繼承,封裝,多態。 1. 封裝: 把很多數據封裝到?個對象中. 把固定功能的代碼封裝到?個代碼塊, 函數, 對象, 打包成模塊. 這都屬于封裝的思想. 具體的情況具體分析. 比如. 你寫了?個很?B的函數. 那這個也可以被稱為…

configurablebeanfactory

ConfigurableBeanFactory定義BeanFactory的配置.ConfigurableBeanFactory中定義了太多太多的api,比如類加載器,類型轉化,屬性編輯器,BeanPostProcessor,作用域,bean定義,處理bean依賴關系,合并其他ConfigurableBeanFactory,bean如何銷毀. ConfigurableBeanFactory同時繼承了Hi…

Xlua文件在熱更新中調用方法

Xlua文件在熱更新中調用方法 public class news : MonoBehaviour { LuaEnv luaEnv;//定義Lua初始變量 void Awake() { luaEnv new LuaEnv();//new開辟空間 luaEnv.AddLoader(myload);//調用方法地址、返回字節 luaEnv.DoString("requirefish");//更新文件 } void O…

springboot 使用的配置

1,控制臺打印sql logging:level:com.sdyy.test.mapper: debug 2,開啟駝峰命名 mybatis.configuration.map-underscore-to-camel-casetrue 轉載于:https://www.cnblogs.com/xiaohu1218/p/10477318.html

AutowireCapableBeanFactory接口

AutowireCapableBeanFactory在BeanFactory基礎上實現了對存在實例的管理.可以使用這個接口集成其它框架,捆綁并填充并不由Spring管理生命周期并已存在的實例.像集成WebWork的Actions 和Tapestry Page就很實用. 一般應用開發者不會使用這個接口,所以像ApplicationContext這樣的…

外觀模式

一、什么是外觀模式   有些人可能炒過股票,但其實大部分人都不太懂,這種沒有足夠了解證券知識的情況下做股票是很容易虧錢的,剛開始炒股肯定都會想,如果有個懂行的幫幫手就好,其實基金就是個好幫手,支付寶…

OC內存管理

OC內存管理 一、基本原理 (一)為什么要進行內存管理。 由于移動設備的內存極其有限,所以每個APP所占的內存也是有限制的,當app所占用的內存較多時,系統就會發出內存警告,這時需要回收一些不需要再繼續使用的…

cf1132E. Knapsack(搜索)

題意 題目鏈接 Sol 看了status里面最短的代碼。。感覺自己真是菜的一批。。直接爆搜居然可以過&#xff1f;。。但是現在還沒終測所以可能會fst。。 #include<bits/stdc.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #defi…

ConfigurableListableBeanFactory

ConfigurableListableBeanFactory 提供bean definition的解析,注冊功能,再對單例來個預加載(解決循環依賴問題). 貌似我們一般開發就會直接定義這么個接口了事.而不是像Spring這樣先根據使用情況細分那么多,到這邊再合并 ConfigurableListableBeanFactory具體&#xff1a; 1、…

焦旭超 201771010109《面向對象程序設計課程學習進度條》

《2018面向對象程序設計&#xff08;java&#xff09;課程學習進度條》 周次 &#xff08;閱讀/編寫&#xff09;代碼行數 發布博客量/博客評論量 課堂/課余學習時間&#xff08;小時&#xff09; 最滿意的編程任務 第一周 50/20 1/0 6/4 九九乘法表 第二周 90/5…

面試題集錦

1. L1范式和L2范式的區別 (1) L1范式是對應參數向量絕對值之和 (2) L1范式具有稀疏性 (3) L1范式可以用來作為特征選擇&#xff0c;并且可解釋性較強&#xff08;這里的原理是在實際Loss function 中都需要求最小值&#xff0c;根據L1的定義可知L1最小值只有0&#xff0c;故可以…