最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ const的使用及this指針常方法(面試最愛問的this指針)

 更新時間:2021年04月12日 08:29:30   作者:雙魚211  
這篇文章主要介紹了C++ const的使用,this指針,常方法(面試最愛問的this指針),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1. const的使用

const的使用有以下四種情況:

  • const int* p
  • int const *p
  • int* const p
  • const int* const p

我們可以通過以下圖解來理解這四種情況const到底修飾的是誰:

在這里插入圖片描述

當const在 “ * ” 的左邊,則指向的值不能被修改
在這里插入圖片描述
當const在 “ * ” 的右邊,則自身不能被修改
在這里插入圖片描述

2. this指針

 2.1 前言(this指針的引出)

觀察如下代碼,我們會發(fā)現(xiàn),Date類中有Display和SetDate兩個成員函數(shù),函數(shù)體中沒有關于不同對象的區(qū)分,那么當d1調(diào)用SetDate函數(shù)時,該函數(shù)是如何知道應該設置d1對象,還是設置d2對象呢?

#include<iostream>
using namespace std;
class Date
{
public:
	void DisPlay()
	{
		cout << _year <<"_"<< _month <<"_"<< _day << endl;
	}
	void SetDate(int year,int month,int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1, d2;
	d1.SetDate(2018, 12, 15);
	d2.SetDate(2021, 4, 8);
	d1.DisPlay();
	d2.DisPlay();
	return 0;

}

為了解決上述問題,C++中引入了this指針

2.2 什么是this指針

C++編譯器給每個"非靜態(tài)的成員函數(shù)"增加了一個隱藏的指針參數(shù),讓該指針指向當前對象(誰調(diào)用此函數(shù),誰就是當前對象),在函數(shù)體中所有成員變量的操作,都是通過該指針去訪問。只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編譯器自動完成。

2.3 this指針的特性

this指針的類型:類的類型* const只能在”成員函數(shù)“的內(nèi)部使用this指針本質(zhì)上其實是一個成員函數(shù)的形參,是對象調(diào)用成員函數(shù)時,將對象地址作為實參傳遞給this形參。所以對象中不存儲this指針this指針是成員函數(shù)第一個隱含的指針形參,一般情況由編譯器通過ecx寄存器自動傳遞,不需要用戶傳遞this指針代表了當前對象的地址,一般情況是隱藏的

驗證一:

在這里插入圖片描述

此處為什么會報錯呢?因為this指針一般是由編譯器通過ecx寄存器自動傳遞的,不需要用戶傳遞,而用戶寫入this指針相當于完成了編譯器的工作,所以會報錯


驗證二:

哪種情況需要我們寫入this指針呢?

在這里插入圖片描述

如上圖所示,我們會發(fā)現(xiàn)情況一,如果不使用this指針,相當于將自己賦值給自己,和私有屬性中的_year,_month,_day沒有關系,這樣寫沒辦法區(qū)分哪個私有屬性中的哪個是參數(shù)中的,所以,只需向情況二一樣,在私有成員前加是this指針即可

2.4 [面試題1] this指針存在哪?

編譯器在生成程序時加入了獲取對象首地址的相關代碼,并把獲取的相關首地址存放在寄存器ECX中(VC++編譯器是放在ECX中,其他編譯器有可能不同)。也就是成員函數(shù)的其他參數(shù)正常都是存放在棧中,而this指針參數(shù)存放在寄存器中

2.5 [面試題2] this指針可以為空嗎?

當我們調(diào)用函數(shù)時,如果函數(shù)內(nèi)部不需要使用到this指針,也就是不需要通過this指針指向當前對象并對其進行操作時,this指針可以為空(eg:在函數(shù)中什么都不放,或者隨便打印一個字符串);如果調(diào)用的函數(shù)需要this指針指向當前對象,并進行操作時,this指針不能為空,否則就會發(fā)生錯誤(空指針引用)

3. 常方法

在一個普通成員函數(shù)后面加上const修飾,就是常成員函數(shù)

在這里插入圖片描述

常方法可以訪問對象中的常成員,也可以訪問普通成員常方法不允許修改任何數(shù)據(jù)數(shù)據(jù)的值

意義:可以防止程序員不下心修改了成員變量的值

到此這篇關于C++ const的使用,this指針,常方法(面試最愛問的this指針)的文章就介紹到這了,更多相關C++ const的使用,this指針,常方法(面試最愛問的this指針)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++?Boost?Accumulators累加器詳細講解

    C++?Boost?Accumulators累加器詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • 最小生成樹算法C語言代碼實例

    最小生成樹算法C語言代碼實例

    這篇文章主要介紹了最小生成樹算法C語言代碼實例,有需要的朋友可以參考一下
    2013-12-12
  • C語言中字符串常用操作總結

    C語言中字符串常用操作總結

    C語言是一種非常流行的編程語言,它支持各種數(shù)據(jù)類型,包括整數(shù)、浮點數(shù)、字符和字符串等,本文將介紹?C語言中字符串的相關知識,包括字符串的定義、初始化、賦值等,需要的可以參考一下
    2023-05-05
  • C語言掃雷游戲的實現(xiàn)代碼

    C語言掃雷游戲的實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了C語言掃雷游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • wxWidgets實現(xiàn)無標題欄窗口拖動效果

    wxWidgets實現(xiàn)無標題欄窗口拖動效果

    這篇文章主要為大家詳細介紹了wxWidgets實現(xiàn)無標題欄窗口拖動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C++多線程傳參的實現(xiàn)方法

    C++多線程傳參的實現(xiàn)方法

    本文主要介紹了C++多線程傳參的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • c++中的static修飾符示例詳解

    c++中的static修飾符示例詳解

    在c++中,靜態(tài)成員是屬于整個類而不是某個對象,靜態(tài)成員變量只存儲一份供所有對象共用,下面這篇文章主要給大家介紹了關于c++中static修飾符的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • C語言實現(xiàn)strlen的三種方法小結

    C語言實現(xiàn)strlen的三種方法小結

    本文主要介紹了C語言實現(xiàn)strlen的三種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C/C++編寫推箱子小游戲

    C/C++編寫推箱子小游戲

    這篇文章主要為大家詳細介紹了C/C++編寫推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • QT實現(xiàn)按鈕開關Form窗體的效果的示例代碼

    QT實現(xiàn)按鈕開關Form窗體的效果的示例代碼

    本文主要介紹了QT實現(xiàn)按鈕開關Form窗體的效果的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07

最新評論

探索| 浪卡子县| 陵川县| 简阳市| 桃园县| 徐汇区| 巴塘县| 东源县| 金溪县| 襄垣县| 怀集县| 明水县| 阿瓦提县| 肃北| 徐闻县| 嘉善县| 南部县| 和田市| 望奎县| 明水县| 合肥市| 渭南市| 中西区| 乐陵市| 蒲城县| 浦县| 霍城县| 图木舒克市| 甘谷县| 蚌埠市| 涞水县| 永寿县| 柘城县| 台州市| 安义县| 依安县| 军事| 化州市| 黄龙县| 宜都市| 南汇区|