您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)C++成員如何解除引用運(yùn)算符,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
下面看下成員解除引用運(yùn)算符,C++允許定義指向類成員的指針,對(duì)這種指針進(jìn)行聲明或解除引用時(shí),需要使用一種特殊的表示法。
例:
class Example { private: int feet; int inches; public: Example(); Example(int ft); ~Example(); void show_in()const; void show_ft()const; void use_ptr()const; };
如果沒(méi)有具體的對(duì)象,則inches成員只是一個(gè)標(biāo)簽。也就是說(shuō),這個(gè)類將inches定義為一個(gè)成員標(biāo)識(shí)符,但要為它分配內(nèi)存。必須聲明這個(gè)類的一個(gè)對(duì)象:
Example ob;//現(xiàn)在ob.inches存在
因此,可以結(jié)合使用標(biāo)識(shí)符inches和特定的對(duì)象,來(lái)引用實(shí)際的內(nèi)存單元(對(duì)于成員函數(shù),可以省略對(duì)象名,但對(duì)象被認(rèn)為是指針執(zhí)行對(duì)象)。
C++允許這樣定義一個(gè)指向標(biāo)識(shí)符inches的成員指針:
int Example::*pt = &Example::inchers;
這種指針與常規(guī)指針有所區(qū)別。常規(guī)指針指向特定的單元格,而pt指針并不是指向特定的內(nèi)存單元,因?yàn)槁暶髦袥](méi)有指出具體的對(duì)象。指針pt指的是inches成員在任意Example對(duì)象中的位置。和標(biāo)識(shí)符inches一樣,pt被設(shè)計(jì)與對(duì)象標(biāo)識(shí)符要求使用。實(shí)際上。表達(dá)式*pt對(duì)標(biāo)識(shí)符inches的角色做了假設(shè),因此,可以使用對(duì)象標(biāo)識(shí)符來(lái)指定訪問(wèn)的對(duì)象,使用pt指針來(lái)指定該對(duì)象的inches成員。例如:類方法可以使用下面得的代碼:
int Example::*pt = &Example::inches; Example ob1; Example ob2; Example *pq = new Example; cout<<ob1.*pt<<endl;//ob1對(duì)象的inches成員 cout<<ob2.*pt<<endl;//ob2對(duì)象的inches成員 cout<<po->*pt<<endl;//*po對(duì)象的inches成員
其中,*和->*都是成員解除運(yùn)算符,聲明對(duì)象后,ob1.*pi指的將是ob1對(duì)象的inches成員,同樣,pq->*pt指的是pq指向的對(duì)象的inxhes成員。
改變上述示例中使用的對(duì)象,將改變使用的inches成員。不過(guò)也可以修改pt指針本身。由于feet的類型與inches相同,因此可以將pt重新設(shè)置為指向feet成員(而不指向inches成員),這樣ob1.*pt將是ob1的feet成員:
pt = &Example::feet; cout<<ob1.*pt<<endl;//*pt相當(dāng)于成員名,可用標(biāo)識(shí)(相同類型)其他成員
可以使用成員指針標(biāo)識(shí)成員函數(shù),其語(yǔ)法稍微復(fù)雜的。對(duì)于不帶任何參數(shù)、返回值為void的函數(shù),聲明一個(gè)指向函數(shù)的指針:
void (*pf)();//pf 指向函數(shù)
聲明指向成員函數(shù)指針時(shí),必須指出該函數(shù)所屬的類。例:
void (Example::*pf)()const;//pf指向類成員函數(shù)
表明pf可用于使用Example方法地方。且Example::*pf必須放在括號(hào)中,可以將特定成員函數(shù)的地址賦給指針:
pf = &Example::show_inches;
注意,與普通函數(shù)指針的賦值情況不同,這里必須使用地址運(yùn)算符,完成賦值操作后,便可以使用一個(gè)對(duì)象來(lái)調(diào)用該成員函數(shù):
Example ob3(20); (ob3.*pf)();//使用ob3對(duì)象調(diào)用show_feet()
必須將ob3*p放在括號(hào)中,以明確地指出,該表達(dá)式表示的是一個(gè)函數(shù)名。
由于show_feet()原型與show_inches()相同,因此也可以使用pf來(lái)訪問(wèn)show_feet()方法:
pf = &Example::show_feet; (ob3*pf)();//將show_feet()應(yīng)用于ob3對(duì)象
例:
下面程序use_ptr()方法,使用成員指針來(lái)訪問(wèn)Example類的數(shù)據(jù)成員和函數(shù)成員。
#include <iostream> using namespace std; class Example { private: int feet; int inches; public: Example(); Example(int ft); ~Example(); void show_in()const; void show_ft()const; void use_ptr()const; }; Example::Example() { feet=0; inches=0; } Example::Example(int ft) { feet=ft; inches=12*feet; } Example::~Example() { } void Example::show_in()const { cout<<inches<<"inches\n"; } void Example::show_ft()const { cout<<feet<<"feet\n"; } void Example::use_ptr()const { Example yard(3); int Example::*pt; pt=&Example::inches; cout<<"Set pt to &Example::inches:\n"; cout<<"this->pt:"<<this->*pt<<endl; cout<<"yard.*pt:"<<yard.*pt<<endl; pt=&Example::feet; cout<<"Set pt to &Example::inches:\n"; cout<<"this->pt:"<<this->*pt<<endl; cout<<"yard.*pt:"<<yard.*pt<<endl; void (Example::*pf)()const; pf=&Example::show_in; cout<<"Set pf to &Example::show_in:\n"; cout<<"Using (this->*pf)():"; (this->*pf)(); cout<<"Using (yard.*pf)():"; (yard.*pf); } int main() { Example car(15); Example van(20); Example garage; cout<<"car.usr_ptr() output:\n"; car.use_ptr(); cout<<"\nvan.use_ptr()outptr:\n"; van.use_ptr(); return 0; }
本例子在編譯期間給指針賦值,在更為復(fù)雜的類中,可以使用指向數(shù)據(jù)成員和方法的成員指針。以便在運(yùn)行階段確定與指針關(guān)聯(lián)的成員。
上述就是小編為大家分享的C++成員如何解除引用運(yùn)算符了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。