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

C++函數(shù)指針+對(duì)象指針+this指針+指向類靜態(tài)和非靜態(tài)成員的指針

 更新時(shí)間:2022年03月10日 11:50:49   作者:機(jī)器學(xué)習(xí)入坑者  
這篇文章主要介紹了C++函數(shù)指針+對(duì)象指針+this指針+指向類靜態(tài)和非靜態(tài)成員的指針,函數(shù)指針定義和賦值的語(yǔ)法指其中數(shù)據(jù)類型代表指向函數(shù)的返回類型,形參表為指向函數(shù)的形參表,更多相關(guān)資料需要的朋友可以參考一下下面文章內(nèi)容

1、指向函數(shù)的指針

函數(shù)的代碼在內(nèi)存中的首地址,是由函數(shù)名表示的,也就是說(shuō)函數(shù)名等價(jià)于函數(shù)代碼首地址。因此,可以定義一個(gè)指向函數(shù)的指針,即函數(shù)指針。函數(shù)指針定義和賦值的語(yǔ)法如下,其中數(shù)據(jù)類型代表指向函數(shù)的返回類型,形參表為指向函數(shù)的形參表;賦值時(shí)必須保證指向的函數(shù)名和函數(shù)指針的返回類型和形參完全相同:

數(shù)據(jù)類型 (*函數(shù)指針名)(形參表);
函數(shù)指針名 = 函數(shù)名;

下面的例子定義了一個(gè)函數(shù)和一個(gè)函數(shù)指針,通過(guò)函數(shù)指針調(diào)用函數(shù)代碼:

/// 1、預(yù)先定義一個(gè)返回int類型的函數(shù)
int addOne(int x) {
?? ?x = x + 1;
?? ?return x;
}

/// 2、定義并賦值函數(shù)指針
int (*pointerAddOne)(int x);
pointerAddOne = addOne;

/// 3、使用函數(shù)指針和使用函數(shù)名的方式相同
data = pointerAddOne(data);

2、對(duì)象指針

顧名思義,對(duì)象指針表示指向?qū)ο蟮闹羔槨?duì)象名即對(duì)象的地址,所以可以將對(duì)象的地址賦值給同類型的指針,從而通過(guò)該指針使用此對(duì)象。

定義與使用對(duì)象指針包含4個(gè)步驟:

  • 定義XXX類型指針;
  • 定義XXX類型對(duì)象;
  • 將對(duì)象地址賦值給指針;
  • 使用“(*對(duì)象指針名).成員名”或者“對(duì)象指針名->成員名”的形式使用對(duì)象的成員;

下面的例子展示了對(duì)象指針的定義與使用:

Duck duck(666);
/// 定義并賦值對(duì)象指針
Duck *pointerDuck;
pointerDuck = &duck;
/// 對(duì)象指針采用兩種方式訪問對(duì)象的成員
printf("%d \n", (*pointerDuck).getAge());
printf("%d \n", pointerDuck->getAge());

3、this指針

C++中,類的每個(gè)對(duì)象的數(shù)據(jù)成員都需要單獨(dú)分配內(nèi)存,但是類的所有對(duì)象的函數(shù)成員共享內(nèi)存。this指針是對(duì)象的非靜態(tài)成員函數(shù)的隱含參數(shù),不需要自己進(jìn)行定義,this指針指向當(dāng)前調(diào)用非靜態(tài)成員函數(shù)的對(duì)象。當(dāng)類對(duì)象調(diào)用非靜態(tài)成員函數(shù)時(shí),對(duì)象的地址作為this指針的值,進(jìn)而非靜態(tài)成員函數(shù)通過(guò)this指向的地址,來(lái)訪問對(duì)象的數(shù)據(jù)成員(類的不同對(duì)象的數(shù)據(jù)成員存儲(chǔ)在不同的地址,this指針用于傳遞對(duì)象的地址)。

this指針訪問其指向的對(duì)象數(shù)據(jù)成員的語(yǔ)法為:

this->數(shù)據(jù)成員名

下面的例子中,Duck類的成員函數(shù)getAge需要訪問對(duì)象的數(shù)據(jù)成員duckAge,但是由于函數(shù)中已經(jīng)存在同名的duckAge變量,所以需要通過(guò)this來(lái)訪問數(shù)據(jù)成員duckAge

class Duck{
public:
?? ?Duck(int age) { duckAge = age; };
?? ?int getAge() {?
?? ??? ?int duckAge = 3;
? ? ? ? ? ? /// 通過(guò)this訪問對(duì)象的數(shù)據(jù)成員duckAge,而不是局部變量duckAge
?? ??? ?return this->duckAge;?
?? ?};
private:
?? ?int duckAge;
};

4、指向類的非靜態(tài)成員的指針

首先,類的靜態(tài)成員和非靜態(tài)成員是不同的,靜態(tài)成員屬于類,而非靜態(tài)成員屬于對(duì)象。指向類的非靜態(tài)成員的指針,包含指向數(shù)據(jù)成員的指針和指向函數(shù)成員的指針。聲明時(shí)需要指明指針指向的“類名”和“類型”,類型表示數(shù)據(jù)成員或函數(shù)成員的數(shù)據(jù)類型:

類型 類名::*數(shù)據(jù)成員指針名;
類型 (類名::*函數(shù)成員指針名)(參數(shù)表);

下面定義的Duck類包含public成員:int類型數(shù)據(jù)成員duckWeight和int類型函數(shù)成員getAge()(指向非靜態(tài)成員的指針也必須遵守訪問權(quán)限,不能指向private成員)下面分別聲明指向二者的指針:

int Duck::*pointerDuckWeight;
int (Duck::*pointerGetAge)();

指向非靜態(tài)成員的數(shù)據(jù)指針和函數(shù)指針賦值語(yǔ)法為:

數(shù)據(jù)成員指針名 = &類名::數(shù)據(jù)成員名;
函數(shù)成員指針名 = &類名::函數(shù)成員名;
下面對(duì)兩個(gè)指針進(jìn)行賦值:

pointerDuckWeight = &Duck::duckWeight;
pointerGetAge = &Duck::getAge;

上面進(jìn)行的聲明和賦值都是針對(duì)類進(jìn)行的,所以并沒有指向?qū)ο蟮某蓡T地址。這里涉及到類的定義過(guò)程,類定義時(shí)并沒有分配內(nèi)存,而只是確定各個(gè)數(shù)據(jù)成員所占內(nèi)存大小和相對(duì)位置。所以,可以使用對(duì)象的起始地址加相對(duì)位置對(duì)數(shù)據(jù)成員進(jìn)行訪問。非靜態(tài)數(shù)據(jù)成員指針訪問成員的語(yǔ)法有如下兩種方式:

對(duì)象名.*數(shù)據(jù)成員的指針名
對(duì)象指針名->*數(shù)據(jù)成員指針名

/// 調(diào)用例子
printf("%d \n", duck.*pointerDuckWeight);

函數(shù)成員并不針對(duì)每個(gè)對(duì)象都有一個(gè)副本,而是共享的。對(duì)象調(diào)用函數(shù)成員時(shí)需要通過(guò)this指針,非靜態(tài)成員函數(shù)指針的調(diào)用包含下面兩種語(yǔ)法:

(對(duì)象名.函數(shù)成員指針名)(實(shí)參表)
(對(duì)象指針名->*函數(shù)成員指針名 )(實(shí)參表)

/// 實(shí)際調(diào)用的例子
printf("%d \n", (duck.*pointerGetAge)());

5、指向類的靜態(tài)成員的指針

對(duì)于類的靜態(tài)數(shù)據(jù)成員和函數(shù)成員,由于其并不屬于具體的對(duì)象,所以只需要普通的數(shù)據(jù)型指針和函數(shù)型指針即可。

下面定義的Duck類包含用static聲明的靜態(tài)數(shù)據(jù)成員和靜態(tài)函數(shù)成員:

class Duck{
public:
?? ?static int getAge() {?
?? ??? ?return 666;
?? ?};
?? ?static int duckWeight;
};
int Duck::duckWeight = 333;

下面是指向類的靜態(tài)成員的數(shù)據(jù)型指針和函數(shù)型指針的定義和賦值過(guò)程:

int *pointerDuckWeight;
int (*pointerGetAge)();
/// 賦值語(yǔ)法:指針名=&類名:靜態(tài)成員名
pointerDuckWeight = &Duck::duckWeight;
pointerGetAge = &Duck::getAge;

調(diào)用指針的時(shí)候,只需要遵守基本數(shù)據(jù)型指針和函數(shù)型指針的調(diào)用語(yǔ)法即可:

printf("%d \n", *pointerDuckWeight);
printf("%d \n", (*pointerGetAge)());

到此這篇關(guān)于C++函數(shù)指針+對(duì)象指針+this指針+指向類靜態(tài)和非靜態(tài)成員的指針的文章就介紹到這了,更多相關(guān)C++指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解C++封閉類的定義與使用

    深入了解C++封閉類的定義與使用

    一個(gè)類的成員變量如果是另一個(gè)類的對(duì)象,就稱之為“成員對(duì)象”。包含成員對(duì)象的類叫封閉類(enclosed?class)。本文主要和大家聊聊C++封閉類的使用,需要的可以參考一下
    2022-11-11
  • 數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹子結(jié)構(gòu)的詳解

    數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹子結(jié)構(gòu)的詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹子結(jié)構(gòu)的詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • cocos2dx-3.10 C++實(shí)現(xiàn)滾動(dòng)數(shù)字

    cocos2dx-3.10 C++實(shí)現(xiàn)滾動(dòng)數(shù)字

    這篇文章主要為大家詳細(xì)介紹了cocos2dx-3.10 C++實(shí)現(xiàn)滾動(dòng)數(shù)字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 使用C語(yǔ)言編寫鋼琴小程序

    使用C語(yǔ)言編寫鋼琴小程序

    這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言編寫鋼琴小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++中不得不說(shuō)的map容器

    C++中不得不說(shuō)的map容器

    大家好,本篇文章主要講的是C++中不得不說(shuō)的map容器,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • VC基于ADO技術(shù)訪問數(shù)據(jù)庫(kù)的方法

    VC基于ADO技術(shù)訪問數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了VC基于ADO技術(shù)訪問數(shù)據(jù)庫(kù)的方法,較為詳細(xì)的分析了VC使用ADO操作數(shù)據(jù)庫(kù)的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • C++模板二段名字查找方法

    C++模板二段名字查找方法

    下面小編就為大家?guī)?lái)一篇C++模板二段名字查找方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C語(yǔ)言如何建立鏈表并實(shí)現(xiàn)增刪查改詳解

    C語(yǔ)言如何建立鏈表并實(shí)現(xiàn)增刪查改詳解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言如何建立鏈表并實(shí)現(xiàn)增刪查改的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • C++ Qt之halcon讀取像素項(xiàng)目過(guò)程詳解

    C++ Qt之halcon讀取像素項(xiàng)目過(guò)程詳解

    這篇文章主要介紹了C++ Qt之halcon讀取像素項(xiàng)目過(guò)程詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++構(gòu)造函數(shù)詳解

    C++構(gòu)造函數(shù)詳解

    這篇文章主要介紹了C++構(gòu)造函數(shù)詳解,上一篇文章我們介紹了定義了類,在使用之前,往往還需要對(duì)類進(jìn)行初始化。這篇介紹的就是對(duì)類進(jìn)行初始化的方法,需要的朋友可以參考一下
    2022-01-01

最新評(píng)論

普格县| 石门县| 榆中县| 建阳市| 连城县| 淅川县| 酒泉市| 奉节县| 富锦市| 方城县| 湟源县| 沂水县| 醴陵市| 濉溪县| 定州市| 万山特区| 祥云县| 闽清县| 榕江县| 博乐市| 石城县| 吐鲁番市| 长葛市| 灵石县| 嘉义市| 洛南县| 峨眉山市| 英超| 红桥区| 达孜县| 措勤县| 楚雄市| 大丰市| 松阳县| 民丰县| 宜阳县| 乌审旗| 剑河县| 平远县| 天台县| 溧水县|