亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1. const的使用

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

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

我們可以通過(guò)以下圖解來(lái)理解這四種情況const到底修飾的是誰(shuí):

在這里插入圖片描述

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

2. this指針

 2.1 前言(this指針的引出)

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

#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;

}

為了解決上述問(wèn)題,C++中引入了this指針

2.2 什么是this指針

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

2.3 this指針的特性

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

驗(yàn)證一:

在這里插入圖片描述

此處為什么會(huì)報(bào)錯(cuò)呢?因?yàn)閠his指針一般是由編譯器通過(guò)ecx寄存器自動(dòng)傳遞的,不需要用戶傳遞,而用戶寫入this指針相當(dāng)于完成了編譯器的工作,所以會(huì)報(bào)錯(cuò)


驗(yàn)證二:

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

在這里插入圖片描述

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

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

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

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

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

3. 常方法

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

在這里插入圖片描述

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

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

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

相關(guān)文章

  • 深入分析C++中幾個(gè)最不常用的關(guān)鍵字

    深入分析C++中幾個(gè)最不常用的關(guān)鍵字

    本篇文章是對(duì)C++中幾個(gè)最不常用的關(guān)鍵字進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

    帶你用C語(yǔ)言實(shí)現(xiàn)strtok和字符串分割函數(shù)

    下面小編就為大家?guī)?lái)一篇c語(yǔ)言中字符串分割函數(shù)及實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • C++實(shí)現(xiàn)LeetCode(136.單獨(dú)的數(shù)字)

    C++實(shí)現(xiàn)LeetCode(136.單獨(dú)的數(shù)字)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(136.單獨(dú)的數(shù)字),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 實(shí)例講解C++編程中的虛函數(shù)與虛基類

    實(shí)例講解C++編程中的虛函數(shù)與虛基類

    這篇文章主要介紹了C++編程中的虛函數(shù)與虛基類的實(shí)例講解,虛函數(shù)與虛基類的使用是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-02-02
  • 詳解C++實(shí)現(xiàn)匈牙利算法

    詳解C++實(shí)現(xiàn)匈牙利算法

    匈牙利算法是一種在多項(xiàng)式時(shí)間內(nèi)求解任務(wù)分配問(wèn)題的組合優(yōu)化算法,并推動(dòng)了后來(lái)的原始對(duì)偶方法。美國(guó)數(shù)學(xué)家哈羅德·庫(kù)恩于1955年提出該算法。此算法之所以被稱作匈牙利算法,是因?yàn)樗惴ê艽笠徊糠质腔谝郧靶傺览麛?shù)學(xué)家Dénes K&#337;nig和Jen&#337; Egerváry的工作之上創(chuàng)建起來(lái)的
    2021-06-06
  • 使用C語(yǔ)言打印月歷

    使用C語(yǔ)言打印月歷

    這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言打印月歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++數(shù)據(jù)結(jié)構(gòu)與算法之哈夫曼樹(shù)的實(shí)現(xiàn)方法

    C++數(shù)據(jù)結(jié)構(gòu)與算法之哈夫曼樹(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)與算法之哈夫曼樹(shù)的實(shí)現(xiàn)方法,簡(jiǎn)單說(shuō)明了哈夫曼樹(shù)的原理,并結(jié)合具體實(shí)例形式分析了C++實(shí)現(xiàn)哈夫曼樹(shù)的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • C++實(shí)現(xiàn)快捷店會(huì)員管理系統(tǒng)

    C++實(shí)現(xiàn)快捷店會(huì)員管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)快捷店會(huì)員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++開(kāi)發(fā)在IOS環(huán)境下運(yùn)行的LRUCache緩存功能

    C++開(kāi)發(fā)在IOS環(huán)境下運(yùn)行的LRUCache緩存功能

    本文著重介紹如何在XCODE中,通過(guò)C++開(kāi)發(fā)在IOS環(huán)境下運(yùn)行的緩存功能。算法基于LRU,最近最少使用,需要的朋友可以參考下
    2012-11-11
  • C++中重載、重寫(覆蓋)和隱藏的區(qū)別實(shí)例分析

    C++中重載、重寫(覆蓋)和隱藏的區(qū)別實(shí)例分析

    這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下
    2014-08-08

最新評(píng)論