對(duì)象有地址,存放對(duì)象初始地址的指針變量就是指向?qū)ο蟮闹羔樧兞俊?duì)象中的成員也有地址,存放對(duì)象成員地址的指針變量就是指向?qū)ο蟪蓡T的指針變量。
1、指向?qū)ο髷?shù)據(jù)成員的指針定義指向?qū)ο髷?shù)據(jù)成員的指針變量的方法和定義指向普通變量的指針變量方法相同。例如
int *p1; //定義指向整型數(shù)據(jù)的指針變量
定義指向?qū)ο髷?shù)據(jù)成員的指針變量的一般形式為數(shù)據(jù)類型名 *指針變量名;如果Time類的數(shù)據(jù)成員hour為公用的整型數(shù)據(jù),則可以在類外通過(guò)指向?qū)ο髷?shù)據(jù)成員的指針變量訪問(wèn)對(duì)象數(shù)據(jù)成員hour。
p1=&t1.hour;//將對(duì)象t1的數(shù)據(jù)成員hour的地址賦給p1,p1指向t1.hour
cout<<*p1<
2、指向?qū)ο蟪蓡T函數(shù)的指針需要提醒讀者注意: 定義指向?qū)ο蟪蓡T函數(shù)的指針變量的方法和定義指向普通函數(shù)的指針變量方法有所不同。成員函數(shù)與普通函數(shù)有一個(gè)最根本的區(qū)別: 它是類中的一個(gè)成員。編譯系統(tǒng)要求在上面的賦值語(yǔ)句中,指針變量的類型必須與賦值號(hào)右側(cè)函數(shù)的類型相匹配,要求在以下3方面都要匹配:
①函數(shù)參數(shù)的類型和參數(shù)個(gè)數(shù);
②函數(shù)返回值的類型;
③所屬的類。
定義指向成員函數(shù)的指針變量應(yīng)該采用下面的形式:
void (Time::*p2)( );//定義p2為指向Time類中公用成員函數(shù)的指針變量
定義指向公用成員函數(shù)的指針變量的一般形式為
數(shù)據(jù)類型名 (類名::*指針變量名)(參數(shù)表列);
可以讓它指向一個(gè)公用成員函數(shù),只需把公用成員函數(shù)的入口地址賦給一個(gè)指向公用成員函數(shù)的指針變量即可。如
p2=&Time::get_time;
使指針變量指向一個(gè)公用成員函數(shù)的一般形式為
指針變量名=&類名::成員函數(shù)名;
例9.7 有關(guān)對(duì)象指針的使用方法。
#include
using namespace std;
class Time
{
public:
Time(int,int,int);
int hour;
int minute;
int sec;
void get_time( );
};
Time::Time(int h,int m,int s)
{
hour=h;
minute=m;
sec=s;
}
void Time::get_time( ) //聲明公有成員函數(shù)
//定義公有成員函數(shù)
{
cout<}
int main( )
{
Time t1(10,13,56); //定義Time類對(duì)象t1
int *p1=&t1.hour; //定義指向整型數(shù)據(jù)的指針變量p1,并使p1指向t1.hour
cout<<* p1< t1.get_time( ); //調(diào)用對(duì)象t1的成員函數(shù)get_time
Time *p2=&t1; //定義指向Time類對(duì)象的指針變量p2,并使p2指向t1
p2->get_time( ); //調(diào)用p2所指向?qū)ο?即t1)的get_time函數(shù)
void (Time::*p3)( ); //定義指向Time類公用成員函數(shù)的指針變量p3
p3=&Time::get_time; //使p3指向Time類公用成員函數(shù)get_time
(t1.*p3)( ); //調(diào)用對(duì)象t1中p3所指的成員函數(shù)(即t1.get_time( ))
}
程序運(yùn)行結(jié)果為
10 (main函數(shù)第4行的輸出)
10:13:56 (main函數(shù)第5行的輸出)
10:13:56 (main函數(shù)第7行的輸出)
10:13:56 (main函數(shù)第10行的輸出)
可以看到為了輸出t1中hour,minute和sec的值,可以采用3種不同的方法。
幾點(diǎn)說(shuō)明:
(1) 從main函數(shù)第9行可以看出: 成員函數(shù)的入口地址的正確寫法是: &類名::成員函數(shù)名。
(2) main函數(shù)第8、9兩行可以合寫為一行:
void (Time::*p3)( )=&Time::get_time; //定義指針變量時(shí)指定其指向出處:http://see.xidian.edu.cn/cpp/biancheng/view/200.html
成都創(chuàng)新互聯(lián)公司成立與2013年,先為湖州等服務(wù)建站,湖州等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為湖州企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。////////////////////////eg2/////////////////////////////////
指向?qū)ο蟮闹羔?/strong>
在建立對(duì)象時(shí),編譯系統(tǒng)會(huì)為每一個(gè)對(duì)象分配一定的存儲(chǔ)空間,以存放其成員。對(duì)象空間的起始地址就是對(duì)象指針。可以定義一個(gè)指針變量,用來(lái)存放對(duì)象的指針。
如果有一個(gè)類:
class Time
{public:
int hour;
int minute;
int sec;
void get_time;
};
void Time ::get_time()
{
cout<}
在此基礎(chǔ)上有以下語(yǔ)句:
Time *pt;
Time t1;
pt = &t1;
這樣,pt就是指向Time類對(duì)象的指針變量,他只想對(duì)象t1。
定義指向類對(duì)象的指針變量的一般形式:
*pt pt所指向的對(duì)象,即t1
(*pt).hour pt所指向的對(duì)象中的hour成員,即t1.hour
pt->hour pt所指向的對(duì)象中的hour成員,即t1.hour
(*pt).get_time() 調(diào)用pt所指向的對(duì)象中的get_time的函數(shù),即t1.get_time
pt->get_time() 調(diào)用pt所指向的對(duì)象中的get_time的函數(shù),即t1.get_time
網(wǎng)站題目:C++對(duì)象指針—指向?qū)ο蟪蓡T的指針-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/hjjpg.html