国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

文章標(biāo)題 C++成員變量以及成員函數(shù)指針

2019-11-06 07:27:45
字體:
供稿:網(wǎng)友

類的成員變量指針和成員函數(shù)指針作為一種特殊的指針類型,在c++語法中有著特殊的使用方式和實(shí)現(xiàn)機(jī)制 這里有兩個基本要點(diǎn) *****1/成員變量指針本質(zhì)上就是在類的聲明中,變量在類中的相對地址. 2/成員函數(shù)既然是函數(shù),代表的就是一個地址,一個絕對地址* 那么我們可以做一個簡單的實(shí)驗(yàn)來探索這種機(jī)制:

/*main.cpp*/#include <iostream>#include <cstring>using namespace std;class Time{public: void showtime(void) const { cout << "時間 " << year << ',' << month << ',' << sec << endl; } Time (int year1,int month1,double sec1) : year(year1),month (month1),sec(sec1){ cout << "構(gòu)造函數(shù)" << endl; }public: int year; int month; double sec;};int main(){/*我們嘗試使用成員變量指針,并將變量的值打印出來*/int Time::*p_year = &Time::year;int Time::*p_month = &Time::month;double Time::*p_sec = &Time::sec;/*存儲成員變量的值 容器*/int copy = 0;memcpy(&copy,&p_year,sizeof(p_year));cout << copy << endl;memcpy(&copy,&p_month,sizeof(p_month));cout << copy << endl;memcpy(&copy,&p_sec,sizeof(p_sec));cout << copy << endl;/*探究成員函數(shù)*/void (Time::*p_show) (void) const = &Time::showtime;Time t1(2017,3,0.1), *p1 = &t1;Time t2(2017,3,0.2),*p2 = &t2;/*調(diào)用成員函數(shù)*/(t1.*p_show) ();(p1->*p_show) ();(t2.*p_show) ();(p2->*p_show) ();return 0;}/*g++ main.cpp./a.out 運(yùn)行輸出:048構(gòu)造函數(shù)構(gòu)造函數(shù)時間 2017,3,0.1時間 2017,3,0.1時間 2017,3,0.2時間 2017,3,0.2那么結(jié)果就很明顯了,成員變量year month sec相對Time類聲明相對地址依次是 0(首地址), (隔著一個int)4,(隔著兩個int)8,對于c++編譯器來說使用成員變量指針就會通過某一個對象的首地址通過和這個相對地址相加,計算出變量的絕對地址成員函數(shù)既然是絕對地址,為什么需要使用這種另類的聲明方法呢?和C語言一樣直接聲明一個函數(shù)指針,調(diào)用的時候傳遞參數(shù)不就ok了嗎?這個實(shí)際上比較簡單,因?yàn)閠his指針啊,C++類中實(shí)現(xiàn)的非靜態(tài)成員函數(shù)是有一個隱含的參數(shù)(形參this 類類型 *),所以使用成員函數(shù)的聲明形式就是為了這個this指針.*/
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 柳林县| 改则县| 天峻县| 明水县| 绵竹市| 茌平县| 凌源市| 嘉峪关市| 天台县| 邵东县| 奇台县| 郧西县| 河间市| 理塘县| 科技| 深泽县| 萍乡市| 浠水县| 明水县| 都安| 桐乡市| 宁波市| 大同县| 勐海县| 湖南省| 通城县| 壶关县| 东阳市| 靖江市| 刚察县| 睢宁县| 武胜县| 南川市| 加查县| 和田市| 平江县| 聂荣县| 依安县| 商丘市| 涞源县| 濮阳县|