六章數(shù)組、指針與字符串課件_第1頁
六章數(shù)組、指針與字符串課件_第2頁
六章數(shù)組、指針與字符串課件_第3頁
六章數(shù)組、指針與字符串課件_第4頁
六章數(shù)組、指針與字符串課件_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、C+語言程序設計 第二單元 指針第六章 數(shù)組、指針、字符串1教學要求: 1. 掌握數(shù)組的概念和使用; 2. 掌握指針的概念、運算、指針數(shù)組和對象指針; 3. 掌握動態(tài)內(nèi)存分配的應用; 4. 掌握字符串的應用;教學重點: 1. 數(shù)組的聲明、存儲,數(shù)組作為參數(shù)和對象數(shù)組 2. 指針的聲明、運算,處理數(shù)組元素,對象指針 3. new運算和 delete運算教學難點: 1. 指針的概念 2. 指針作為函數(shù)參數(shù),處理數(shù)組元素,對象指針 2第六章 數(shù)組 指針與字符串教學目的: 通過本章的學習,學生應掌握使用數(shù)組;掌握字符串數(shù)據(jù)的組織和處理;掌握指針的概念和使用方法;掌握派生類的聲明;繼承中的訪問控制。教學

2、重點: 派生類的聲明;繼承中的訪問控制。教學難點:不同繼承方式下對基類成員的訪問控制教學手段:電子教案3本章主要內(nèi)容數(shù)組指針動態(tài)存儲分配指針與數(shù)組指針與函數(shù)字符串46.2指針(關(guān)于內(nèi)存地址)6.2.1內(nèi)存空間的訪問方式地址編碼存儲單元的地址基本內(nèi)存單元從內(nèi)存單元存取數(shù)據(jù)的方法通過變量名訪問通過地址訪問地址存儲結(jié)構(gòu)簡圖地址譯碼器數(shù)據(jù)56.2.1指針變量的概念指針和指針變量的概念指針: 在C和C+中,將地址形象化地稱為“指針”。一個變量的地址稱為該變量的 “ 指針 ”。指針變量: 專門用來存放地址的變量叫做 “ 指針變量 ”。內(nèi)存用戶數(shù)據(jù)區(qū)變量 i變量 j變量 i_pointer362000200

3、02004301066.2.2 指針變量的應用指針變量應用的步驟: 1. 聲明指針變量 2. 給指針變量賦值 3. 引用指針變量7指針變量的聲明定義指針變量的一般形式為:6.2.3指針變量的定義與應用數(shù)據(jù)類型 * 指針變量名例如: int * pointer_1 ; float * pointer_2 ;指針變量前面的 “ * ”,表示該變量的類型為指針型變量?!皵?shù)據(jù)類型”可以是任意類型,用來指定該指針變量所指向的變量的類型,稱之為指針的類型。專門用來存放int型數(shù)據(jù)的地址專門用來存放float型數(shù)據(jù)的地址8指針變量的賦值聲明一個指針變量,未賦值時其中的地址值是一個隨機的數(shù)。因此聲明指針變量之

4、后必須先賦值,才可以使用。 例如: 指針變量 pointer_1 用來存放指向 int 型變量的指針 pointer_2存放指向 float 型變量的指針 。 聲明時同時初始化: 數(shù)據(jù)類型 *指針變量名 = 地址; 使用賦值語句賦值: 數(shù)據(jù)類型 *指針變量; 指針變量 = 地址;96.2.4指針變量的賦值“&”是取地址運算符,用來獲取一個變量的地址。將獲取的變量的地址賦值給指針變量。不能把普通非 0 整數(shù)賦值給指針變量。指針變量的定義與應用int i , * pointer_1;pointer_1 = & i ; /*將變量 i 的地址存放到指針變量 pointer_1 中,因此pointer

5、_1 就“指向”了變量 i */pointer_1&iipointer_1 = 2000;pointer_1 = 0;10指針變量的賦值使用變量地址賦值時,該變量必須在賦值之前已聲明過,且變量類型應與指針類型一致??梢杂靡粋€已賦值的指針變量去賦值給另一 個指針變量。數(shù)組名代表數(shù)組的起始地址,可以將數(shù)組名表示的地址賦值給指針變量指針變量的定義與應用int array 10 , * p1;p1 = array;int i , * p1, *p2;p1 = & i ; p2 = p1;float f;int *p;p = & f;類型不一致11指針變量的賦值一般情況下,一種類型的指針變量只能存放相同

6、類型的變量的地址。特殊的 void 類型的指針,可以存放任何類型的變量的地址。經(jīng)過類型強制轉(zhuǎn)換,void 類型的指針可以訪問任何類型的數(shù)據(jù)。指針變量的定義與應用void *p1;int i, *p2;p1 = & i;p2 = ( int * ) p1;可以訪問任何類型的數(shù)據(jù)指針忘了賦值比整型變量忘了賦值危險得多。例: int count; int *iPtr ; *iPtr = 58; iPtr當前指向什么地方?該代碼能通過編譯,但沒有賦初值的指針iPtr是一個隨機地址?!?iPtr = 58;”是把58賦到內(nèi)存中的隨機位置,因此很可能已經(jīng)破壞了另一變量,甚至修改了棧中的函數(shù)返回地址,計算機

7、將死機或進入死循環(huán)。指針沒有賦值這樣非常危險12指針變量的引用“ * ”是指針運算符,表示指針所指向的變量。 指針變量的定義與應用int i , *p;p = &i; pi* p23&i i = 2; /* 通過變量名直接訪問 */*p = 3; /* *p是 p 所指向的變量,即變量 i ,這是通過指針的間接訪問*/ p 是指針變量,* p 就是 p 所指向的變量 i , 即 *p 等價于 變量 i 。13指針變量的引用指針變量的定義與應用注意:“ * ”出現(xiàn)在聲明語句中和執(zhí)行語句中含義不同。1、“ * ”出現(xiàn)在聲明語句中,表示聲明的變量是指針變量。 例如: int *p;2、 “ * ”出

8、現(xiàn)在執(zhí)行語句中,表示訪問指針所指向的變量。 例如: *p = 3; printf ( “%d n”, *p );例:int i= 26 ; int *P = &i ; /初始化為整型地址 *P = &i ; /error 不能將“int *P = &i ; ”與“*P = &i ; ”混淆。前者是定義語句,*是指針定義符,C+為P指針分配一個指針空間,并用i 的地址值初始化,后者是執(zhí)行語句,左右兩邊類型不匹配。*操作符在指針上的兩種用途要區(qū)分開:定義或聲明時,建立一個指針;執(zhí)行時,間接引用一指針。也要注意: ”&”出現(xiàn)在聲明語句中和執(zhí)行語句中其含義是不同的;例:int i , *p; int

9、&rf = i; /表示聲明的是引用 p = &i; /取地址14例6-6 指針的聲明、賦值與使用#includevoid main( )int *i_pointer;/聲明int型指針i_pointerint i; /聲明int型數(shù)ii_pointer=&i; /取i的地址賦給i_pointeri=10; /int型數(shù)賦初值cout“Output int i=”iendl; /輸出int型 /數(shù)的值coutOutput int pointer i=*i_pointerendl; /輸出int型指針所指地址的內(nèi)容15指針變量的地址指針也是變量,是變量就具有內(nèi)存地址。所以指針也有地址。例:下面的

10、程序輸出iCount變量值,以及iPtr和iCount的地址值: # include int iCount = 18 ; int * iPtr = &iCount ; * iPtr = 58 ; cout iCount endl ; cout iPrt endl ;16 cout &iCount endl ; /與iPtr值相同 cout *iPtr endl ; /與 iCount值相同 cout &iPtr endl ; /指針本身的地址 運行結(jié)果:58 0 x0067fe00 0 x0067fe00 58 0 x0067fdfciPtr0067:FDFC0067:FE00iCount00

11、67:FE005817指針與整型數(shù)的區(qū)別指針在使用中必須類型匹配。例:int iCount = 26 ; int * iPtr = &iCount ; /定義語句:*在此 /處作定義指針變量用,而非間接引用。 * iPtr = &iCount ; /error:不能將整型地 /址轉(zhuǎn)換成整型數(shù) * iPtr = 50 ; /執(zhí)行語句:*在此處作間接引用 指針值不是整型數(shù)賦值語句“* iPtr = &iCount ; ”在BC中會引起類型轉(zhuǎn)換的錯誤。 (cannot convert int* to int)強制轉(zhuǎn)換是合法。 例:允許語句“* iPtr = (int)&iCount ;” 但要注意其

12、賦值的意義。該語句表示將變量iCount的地址值作為一個整型數(shù)賦給變量* iPtr ,即iCount變量。18指針與常量(const指針) 指向常量的指針 int a = 1; int * pi ; pi = &a ; * pi = 58 ; 可以看到,一個指針涉及到兩個變量,指針本身pi 和指向的變量a 。修改這兩個變量的對應操作為“pi = &a ;”和“* pi = 58 ;”。如果不想通過指針間接改變a的值, 可以聲明指向常量的指針。不能通過指針來改變所指對象的值,但指針本身可以改變,可以指向另外的對象。在指針定義語句的類型前加const,表示指向的對象是常量。例: int n1=3;

13、int const n2 = 5;const int *pn = &n1; pn=&n2; /正確*pn=6; /錯誤19指針與常量 指針常量若聲明指針常量,則指針本身的值不能被改變。 在指針定義語句的指針名前加const,表示指針本身是常量。例1:int n1 = 3;int const n2 = 5;int *const pn= &n1; pn = &n2; /錯誤*pn = 6; /正確常量pn0067:FDA60067:F000Data區(qū)0067:F00020void類型指針 一般情況下,指針的值只能賦給相同類型的指針。但是有一種特殊的void類型指針,可以存儲任何類型的對象地址。例:

14、 void類型指針的使用 void vobject ; /error,不能聲明void類型的變量 void * pv ; / ok ,可以聲明void類型的指針 int * pint ; int i ; void main( ) / void類型的函數(shù)沒有返回值 pv = &i ; /void類型指針指向整型變量 pint = (int *)pv ; / 類型強制轉(zhuǎn)換 /void類型指針賦值給整型指針21指針與常量 指向常量的指針常量可以定義一個指向常量的指針常量,它必須在定義時進行初始化。const int ci = 7 ;int ai ;const int * const cpc = &c

15、i ; /指向常量的指針常量const int * const cpi = &ai ; /ok cpi = &ci ; / error:指針值不能修改 *cpi = 39 ; / error:不能修改所指向的對象 ai = 39 ; /ok常量cpc0067:FD660067:F600常量ci0067:F6007226.2.5指針變量的運算指針與整數(shù)的加減運算 指針 p 加上或減去 n ,其意義是指針當前指向位置的前方或后方第 n 個數(shù)據(jù)的地址。 這種運算的結(jié)果值取決于指針指向的數(shù)據(jù)類型。指針加一,減一運算 指向下一個或前一個數(shù)據(jù)的地址。 例如: y = *px+ y = *(px+) ( *

16、 和 + 優(yōu)先級相同,自右向左運算)23papa-2pa-1pa+1pa+2pa+3*(pa-2)*pa*(pa+1)*(pa+2)*(pa+3)*(pa-1)int *pa24long *pbpb-1pbpb+1pb+2*(pb-1)*pb*(pb+1)*(pb+2)25關(guān)系運算指向相同類型數(shù)據(jù)的指針之間可以進行各種關(guān)系運算。指向不同數(shù)據(jù)類型的指針,以及指針與一般整數(shù)變量之間的關(guān)系運算是無意義的。指針可以和零之間進行等于或不等于的關(guān)系運算。例如:p = 0 或 p! = 0賦值運算向指針變量賦的值必須是地址常量或地址變量,不能是普通整數(shù)。但可以賦值為 整數(shù)0,表示 空指針。指針變量的關(guān)系運算

17、例:int *p ; /聲明一個int型指針p p = 0 ; /將p設置為空指針,不指向任何地址266.2.6指向數(shù)組元素的指針聲明與賦值例: int a10, *p; p = &a0; 或 p = a;通過指針引用數(shù)組元素經(jīng)過上述聲明及賦值后: *p 就是a0,*(p+1) 就是a1,. , *(p+i) 就是 ai 。 a i , *(p+i), *(a+i), p i 都是等效的。不能寫 a+因為 a 是數(shù)組首地址是常量。 27例設有一個int型數(shù)組a,有10個元素。用三種方法輸出各元素:使用數(shù)組名和下標使用數(shù)組名和指針運算使用指針變量 指 針28main( ) int a10; in

18、t i; for(i=0; iai; coutendl; for(i=0; i10; i+) coutai; 使用數(shù)組名和下標29main( ) int a10; int i; for(i=0; iai; coutendl; for(i=0; i10; i+) cout*(a+i); 使用數(shù)組名和指針運算30 使用指針變量main( ) int a10; int *p,i; for(i=0; iai; coutendl; for( p = a; p (a+10); p+) cout*p;app316.2.7 指針數(shù)組數(shù)組的元素是指針變量聲明一維指針數(shù)組的語法形式 指 針由 p_i0, p_i1

19、 兩個指針組成類型名T*數(shù)組名下標表達式;例: int *p_i 2 ;32例6-9 利用指針數(shù)組輸出單位矩陣void main( )int line1 =1,0,0; /聲明數(shù)組,矩陣的第一行int line2 =0,1,0; /聲明數(shù)組,矩陣的第二行int line3 =0,0,1; /聲明數(shù)組,矩陣的第三行 int *p_line3; /聲明整型指針數(shù)組p_line0=line1; /初始化指針數(shù)組元素p_line1=line2;p_line2=line3; line10 line20 line30 100&line10&line20&line30 P_line0P_line1P_lin

20、e2int line1 =1,0,0; int line2 =0,1,0;int line3 =0,0,1;33/輸出單位矩陣 coutMatrix test:endl;for(int i=0;i3;i+) /對指針數(shù)組元素循環(huán) for(int j=0;j3;j+) /對矩陣每一行循環(huán) cout p_line i j ; coutendl;輸出結(jié)果為:Matrix test:1,0,00,1,00,0,1P_linei表示什么? line1P_linei line2 line334100010001line20 x0012FF740 x0012FF680 x0012FF5Cp_line0p_l

21、ine1p_line2line10 x0012FF680 x0012FF74line30 x0012FF5C35for(int i=0;i3;i+) for(int j=0;j3;j+) cout *( p_line i + j ) ; coutendl;輸出結(jié)果為:Matrix test:1,0,00,1,00,0,1(p_linei+j)表示指向第i行第j 個元素*(p_linei+j)表示(p_linei+j)指針所指的變量p_lineij1.一維數(shù)組 int i ; int *p; int a10; p = &i; 因為: a = &a0 所以: p = a; p = &a0;效果都一

22、樣a0a36for(int i=0;i3;i+)cout“p_line”i“: ” p_line i endl; for(int j=0;j3;j+) cout “ ”p_line i + j ; coutendl;37二維數(shù)組的指針int a 33= 1, 2, 3, 4, 5, 6, 7, 8, 9 a 0 a 1 a 2 123456789a33a 0 a 0 0 a 0 1 a 0 2 a 1 a 1 0 a 1 1 a 1 2 a 2 a 2 0 a 2 1 a 2 2 可以理解為一維指針數(shù)組int * a3每一行相當于一個具有3個元素的一維int型數(shù)組一維數(shù)組的情況 int *p;

23、 int a5; a0 a1 a2 a3 a4 因為:a = &a0 所以:p = a; p = &a0;效果都一樣二維數(shù)組的情況 int *p; int a22;aa00 a01 a10 a11 a0a1 a0=&a00; p=a0=&a00; 若: p = a;錯誤,因為類型不一致int *p1;int a22;p1 =a; 這樣就正確了,因為p1和a現(xiàn)在都是二級指針38例6-10 二維數(shù)組舉例#include void main( )int array223=11,12,13,21,22,23; for(int i=0;i2;i+) cout *( array2 + i ) endl;

24、for(int j=0;j3;j+) cout *(*( array2 + i ) + j) “ ”; coutendl;指向i行,相當于array2i,即第i行的數(shù)組名。指向第i行的第j個元素是array2數(shù)組的第i 行j列元素array2ij。39在某次運行之后,程序的輸出結(jié)果為:0X0065FDE011,12,130X0065FDEC21,22,23for(int j=0;j3;j+) cout *(*( array2 + i ) + j) ; for(int j=0;j3;j+) cout *( a i + j) ; 406.2.8 以指針作為函數(shù)參數(shù) 指針變量作為形參在函數(shù)調(diào)用時將實

25、參的地址傳遞給形參,使實參和形參指針變量指向同一內(nèi)存單元。通過在被調(diào)用函數(shù)中直接處理主調(diào)函數(shù)中的數(shù)據(jù),而將函數(shù)的處理結(jié)果返回給調(diào)用者。實參是數(shù)組名時形參可以是指針變量在c語言中,以指針作為函數(shù)的形參有三個作用:1.使實參與形參指針指向共同的內(nèi)存空間,以達到參數(shù)雙向傳遞的目的,即通過在被調(diào)用函數(shù)中直接處理主調(diào)函數(shù)中的數(shù)據(jù),而將函數(shù)的處理結(jié)果返回給調(diào)用者。2.減少函數(shù)調(diào)用時數(shù)據(jù)傳遞的開銷。這一作用在C+中有時可以通過引用實現(xiàn),有時還是需要使用指針。3.通過指向函數(shù)的指針傳遞函數(shù)代碼的首地址 在程序設計時,如果某個函數(shù)中以指針或引用作為形參都可以達到同樣目的,則使用引用會使程序的可讀性更好些。41例

26、:題目:讀入三個浮點數(shù),將整數(shù)部分和小數(shù)部分分別輸出#include void splitfloat ( float x, int *intpart, float *fracpart ) /形參 intpart、 fracpart是指針變量 *intpart = int(x); / 取x的整數(shù)部分 *fracpart = x - *intpart; /取x的小數(shù)部分 42void main(void)int i, n;float x, f; for (i = 0; i x; splitfloat ( x, &n, &f); /變量地址做實參splitfloat ( x, &n, &f);nf0

27、 x0012FF780 x0012FF70intpartfracpart0 x0012FF780 x0012FF70void splitfloat ( float x, int *intpart, float *fracpart )43例: 實參為數(shù)組名, 形參為數(shù)組名或指針變量void main ( ) float score_1 5 = 98.5,97,91.5,60,55; float score_210 = 67.5,89.5,99,69.5,77,76.5,54,60,95.5,78; cout average ( score_1, 5) ; cout average ( score

28、_2, 10) ;44/ 形參是數(shù)組float average ( float array , int n ) int i; float aver, sum = array 0; for ( i = 1; i n; i +) sum = sum + array i ; aver = sum / n; return aver;45/形參是指針變量float average ( float *p, int n ) int i; float aver, sum = *p; for ( i = 1; i n; i +) sum = sum + *( p + i) ; aver = sum / n; r

29、eturn aver;466.2.9指針型函數(shù) 返回指針的函數(shù)稱為指針函數(shù) 指針函數(shù)不能把在它內(nèi)部說明的具有局部作用域的數(shù)據(jù)地址作為返回值。 指針函數(shù)的一般定義形式數(shù)據(jù)類型*函數(shù)名(參數(shù)表)函數(shù)體指針函數(shù)不能把在它內(nèi)部說明的具有局部作用域的數(shù)據(jù)地址作為返回值??梢苑祷囟训刂?,可以返回全局或靜態(tài)變量的地址。47例:# include int * getInt(char * str ) /指針函數(shù) int value = 20; cout str endl; return &value ; /warning:將局部變量的地址返回是不妥的Void somefn(char * str) int a =

30、 40; cout str endl ;48void main( ) int *pr = getInt(“input a value:”); /賦值取自返回的指針值cout *pr endl ; /第一次輸出*pr somefn(“It is uncertain.”); cout *pr endl ; /第二次輸出*pr 運行結(jié)果: input a value: 20 It is uncertain. 443550049含義:每個函數(shù)都占用一段內(nèi)存單元,被分配一個入口地址(起始地址),指向函數(shù)地址的指針稱為函數(shù)的指針。 函數(shù)調(diào)用: 函數(shù)名( 參數(shù)表 ) 實質(zhì)就是: 函數(shù)起始地址( 參數(shù)表 )6

31、.2.10 指向函數(shù)的指針 和數(shù)組名代表數(shù)組起始地址一樣,函數(shù)名代表函數(shù)入口地址。50max ( int x, int y ) . . . main ( ) c = max ( a, b);c = max ( a, b);c = 00 x00501028 ( a, b);相當于指令2max00 x00501028指令1指令2指令1max函數(shù)main函數(shù)00 x00501015main51函數(shù)指針聲明形式 數(shù)據(jù)類型 (*函數(shù)指針名) (形參表 );指向函數(shù)的指針指向函數(shù)的指針用一個指針變量存放函數(shù)的起始地址,即指向該函數(shù)。通過指針變量就可以訪問所指向的函數(shù)。函數(shù)指針在使用之前也要進行賦值,使指針

32、指向一個已經(jīng)存在的函數(shù)代碼的起始地址。 函數(shù)指針名函數(shù)名;例:函數(shù)指針的定義為: int (*func) (char a , char b );注意,與指針型函數(shù)的區(qū)別: int * func(char a , char b ); 定義中, func先與( )結(jié)合構(gòu)成函數(shù)的聲明,然后再得到其返回類型為整型指針 int *。52例6-11 函數(shù)指針void print_stuff (float data_to_ignore);void print_message (float list_this_data);void print_float (float data_to_print);void

33、(*function_pointer) (float);void main( ) float pi = 3.14159; float two_pi = 2.0 * pi;53 print_stuff(pi); function_pointer = print_stuff; function_pointer (pi); function_pointer = print_message; function_pointer (two_pi); function_pointer (13.0); function_pointer = print_float; function_pointer (pi);

34、 print_float(pi); return 0 ;也可以通過(*function_pointer) (pi); 的方式調(diào)用是為了兼容C的形式。54void print_stuff(float data_to_ignore) coutThis is the print stuff function.n;void print_message(float list_this_data) cout“The data to be listed is” list_this_data endl; void print_float(float data_to_print) coutThe data to

35、 be printed is” data_to_print 成員名59例: 對象指針應用舉例( 例6-12)#includeclass Point public: Point (int xx, int yy) X = xx; Y = yy; int GetX( ) return X; int GetY( ) return Y; private: int X, Y; ; 60void main( ) Point p1(5,10); Point *ptr; ptr=&p1;cout GetX ( ) endl;cout p1.GetX ( ) GetX ( )ptrX = 15;612.this指

36、針this 指針是一個隱含于每一個類的成員函數(shù)中的特殊指針(包括構(gòu)造函數(shù)和析構(gòu)函數(shù)),它用于指向正在被成員函數(shù)操作的對象。 this 指針就明確地指出了成員函數(shù)當前所操作的數(shù)據(jù)所屬的對象。實際過程當通過一個對象調(diào)用成員函數(shù)時,系統(tǒng)先將該對象的地址賦給this指針,然后調(diào)用成員函數(shù),成員函數(shù)對對象的數(shù)據(jù)成員進行操作時, 就隱含使用了this指針。this 是一個指針變量,因此在成員函數(shù)中,可以使用*this來標識正在調(diào)用該函數(shù)的對象。62Point p1 ( 3, 5 )Point (int xx, int yy) X = xx; Y = yy; Point ( int xx, int yy ,

37、 Point *this)351273this X = xx;this Y = yy;3106p1p2p35159127313651387GetX633.指向類的非靜態(tài)成員的指針類的成員自身也是一些變量、函數(shù)或者對象等,也可以直接將它們的地址存放到一個指針變量中,這樣,就可以使指針直接指向?qū)ο蟮某蓡T,進而可以通過這些指針訪問對象成員。聲明指針的語句形式類型說明符類名:*指針名 ;類型說明符(類名:*指針名)(參數(shù)表);注意:通過指向成員的指針也只能訪問到公有成員。64對數(shù)據(jù)成員指針賦值的一般語法形式指針名 = &類名:數(shù)據(jù)成員名說明:上式只是說明了被賦值的成員指針是專門用于指向哪個數(shù)據(jù)成員的,

38、同時在指針中存放該數(shù)據(jù)成員在類中的相對位置。 當然通過這樣的指針現(xiàn)在并不能訪問什么。 由于類是通過對象而實例化的,在聲明類的對象時才會為具體的對象分配內(nèi)存空間,這時只要將對象在內(nèi)存中的起始地址與成員指針存放的相對偏移結(jié)合起來就可以訪問到對象的數(shù)據(jù)成員了。65訪問數(shù)據(jù)成員的兩種語法形式 對象名. *類成員指針名或?qū)ο笾羔樏? *類成員指針名成員函數(shù)指針在聲明之后要用以下形式的語句對其賦值:指針名 = 類名:函數(shù)成員名利用指針調(diào)用成員函數(shù)的語句形式 (對象名. *類成員指針名)(參數(shù)表)或 (對象指針名- *類成員指針名)(參數(shù)表)66例6-13 訪問對象的公有成員函數(shù)的不同方式#includec

39、lass Point public: Point (int xx, int yy) X = xx; Y = yy; int GetX( ) return X; int GetY( ) return Y; private: int X, Y; 67void main( ) /主函數(shù) point A(4,5) ; /聲明對象A point *p1 = &A ; /聲明對象指針并初始化 int(point:*p_GetX)( ) = point:GetX; /聲明成員函數(shù)指針并初始化 cout(A.*p_GetX)( ) endl; /使用成員函數(shù)指針訪問成員函數(shù) coutGetX)( ) endl; /使用對象指針訪問成員函數(shù) cout A. GetX( ) endl; /使用對象名訪問成員函數(shù)684.指向類的靜態(tài)成員的指針類的靜態(tài)成員可以用普通的指針來指向和訪問。例6-14通過指針訪問類的靜態(tài)數(shù)據(jù)成員#includeclass point public: point (int xx =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論