C++——指針4
8、對象指針 聲明: 類名 *對象指針名
Point A(5,10);
Point *ptr;
ptr=&A;//通過指針訪問對象成員:對象指針名->成員名。ptr->getX();相當於(*ptr).getX;
曾經錯誤的前向引用的例子
class Fred; //前向引用聲明
class Barney { Fred x; //錯誤:類Fred的聲明尚不完善,若改成Fred *x;就正確了。 };//因為沒有聲明fred類的對象,編譯器不知道如何分配內存,所以出錯,如果//改成指針類型的對象,相當於unsigned long類型,編譯器可以明確處理。
class Fred { Barney y;
This指針 隱含於每一個類的成員函數中的特殊指針,存放當前對象的地址,通過對象名調用成員函數,系統先將該對象的地址賦給this指針,然後調用成員函數,成員函數對對象的數據進行操作時,就隱含使用了this指針。如:point類的構造函數中語句 X=xx;相當於this->X=xx;
8.1 指向類的非靜態成員的指針 通過指向成員的指針只能訪問公有成員,聲明:指向公有數據成員的指針 類型說明符 類名::*指針名; 指向公有函數成員的指針 類型說明符 (類名::*指針名)(參數表);僅僅這樣聲明之後並不能直接使用,必須指明指針指向那個成員,需要賦給指針地址(初始化)。指針名
對象名.*類成員指針名; 對象指針名->*類成員指針名;
例6-13 訪問對象的公有成員函數的不同方式
int main() //主函數
{ Point A(4,5); //聲明對象A
Point *p1=&A; //聲明對象指針並初始化
//聲明成員函數指針並初始化
int (Point:::*p_GetX)()=Point::GetX;
//(1)使用成員函數指針訪問成員函數
cout<<(A.*p_GetX)()<<endl;
//(2)使用對象指針訪問成員函數
cout<<(p1->GetX)()<<endl;
//(3)使用對象名訪問成員函數
cout<<A.GetX()<<endl; }
C++——指針4