複製鏈接
請複製以下鏈接發送給好友

對象指針

鎖定
指向類的成員的指針。在C++中,可以説明指向類的數據成員和成員函數的指針。
中文名
對象指針
語    種
C++
定    義
指向類的成員的指針
格    式
類型説明符,類名,指針名
對    象
對象名和對象成員運算符
類    型
對象指針

目錄

對象指針定義

對象指針:指向類的成員的指針。在C++中,可以説明指向類的數據成員和成員函數的指針。

對象指針格式

指向數據成員的指針格式如下:
<類型説明符><類名>::*<指針名>
指向成員函數的指針格式如下:
<類型説明符>(<類名>::*<指針名>)(<參數表>)
例如,設有如下一個類A:
class A
{
public:
int fun (int b) { return a*c+b; }
A(int i) { a=i; }
int c;
private:
int a;
};
定義一個指向類A的數據成員c的指針pc,其格式如下:
int A:: *pc = &A::c;
再定義一個指向類A的成員函數fun的指針pfun,其格式如下:
int (A:: *pfun)(int) = &A::fun;
由於類不是運行時存在的對象。因此,在使用這類指針時,需要首先指定A類的一個對象,然後,通過對象來引用指針所指向的成員。例如,給pc指針所指向的數據成員c賦值8,可以表示如下:
A a;
a.*pc = 8;
其中,運算符.*是用來對指向類成員的指針來操作該類的對象的。
如果使用指向對象的指針來對指向類成員的指針進行操作時,使用運算符->*。例如:
A *p = &a; //a是類A的一個對象,p是指向對象a的指針。
p ->* pc = 8;
讓我們再看看指向一般函數的指針的定義格式:
<類型説明符>*<指向函數指針名>(<參數表>)
關於給指向函數的指針賦值的格式如下:
<指向函數的指針名>=<函數名>
關於在程序中,使用指向函數的指針調用函數的格式如下:
(*<指向函數的指針名>)(<實參表>)

對象指針相關應用

如果是指向類的成員函數的指針還應加上相應的對象名和對象成員運算符
下面給出一個使用指向類成員指針的例子:
#include <iostream.h>
class A
{
public:
A(int i) { a=i; }
int fun(int b) { return a*c+b; }
int c;
private:
int a;
};
void main()
{
A x(8); //定義類A的一個對象x
int A::*pc; //定義一個指向類數據成員的指針pc
pc=&A::c; //給指針pc賦值
x.*pc=3; //用指針方式給類成員c賦值為3
int (A::*pfun)(int); //定義一個指向類成員函數的指針pfun
pfun=&A::fun; //給指針pfun賦值
A *p=&x; //定義一個對象指針p,並賦初值為x
cout<<(p->*pfun)(5)<<endl; //用對象指針調用指向類成員函數指針pfun指向的函數
}
以上程序定義了好幾個指針,雖然它們都是指針,但是所指向的對象是不同的。p是指向類的對象;pc是指向類的數據成員;pfun是指向類的成員函數。因此它們的值也是不相同的。