類和對(duì)象(二)_第1頁(yè)
類和對(duì)象(二)_第2頁(yè)
類和對(duì)象(二)_第3頁(yè)
類和對(duì)象(二)_第4頁(yè)
類和對(duì)象(二)_第5頁(yè)
已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、l指向數(shù)據(jù)成員的指針格式如下: :* l指向成員函數(shù)的指針格式如下: (:*)() class A public: int fun (int b) return a * c + b; A(int i) a = i; int c; private: int a; 定義一個(gè)指向類A的數(shù)據(jù)成員c的指針pc,其格式如下: int A:*pc = &A:c; 定義一個(gè)指向類A的成員函數(shù)fun的指針pfun,其格式如下: int (A:*pfun)(int)=A:fun; 給pc指針?biāo)赶虻臄?shù)據(jù)成員c賦值8,可以表示如下: A a; a.*pc = 8; 使用指向?qū)ο蟮闹羔榿韺?duì)指向類成員的指針進(jìn)行

2、操作: A *p = &a; p- *pc = 8;l一般函數(shù)指針的定義: (*)()l函數(shù)指針的賦值格式: = l函數(shù)指針的調(diào)用格式: (*)()include 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); / x.a = 8 int A:*pc; / 指向整數(shù)的指針 pc = &A:c; / 指向 c x.*pc = 3; / x.c = 3 int (A:*pfun)(int); / 指向函數(shù)的指針 pfun

3、= A:fun; A *p = &x; / 指向?qū)ο蟮闹羔?cout *pfun)(5) endl; / a*c+b = 8*3+5 = 29Ans:29l實(shí)現(xiàn)傳址調(diào)用,可在被調(diào)用函數(shù)中改變調(diào)用函數(shù)的參數(shù)對(duì)象的值,實(shí)現(xiàn)函數(shù)之間的信息傳遞l使用對(duì)象指針實(shí)參僅將對(duì)象的地址值傳給形參,而不進(jìn)行副本的拷貝,這樣可以提高運(yùn)行效率,減少時(shí)空開銷。 #include class M public: M()x = y = 0; M(int i,int j)x = i, y = j; void copy(M *m); void setxy(int i,int j)x = i;y = j; void pr

4、int()cout x . y x; y = m-y;void fun(M m1, M *m2);void main() M p(5, 7), q; q.copy(&p); / q.x = 5, q.y = 7 fun(p, &q); / m1 p : 5,7 m2q : 22,25 p.print(); q.print();void fun(M m1, M *m2) m1,setxy(12, 15); m2-setxy(22, 25);5, 722, 25#include class M public: M()x = y = 0; M(int i, int j)x = i;

5、y = j; void copy(M &m); void setxy(int i, int j)x = i ; y = j; void print()cout x , y x; y = m-y;void fun(M m1, M &m2);void main() M p(5, 7),q; q.copy(p); fun(p, q); p.print(); q.print();void fun(M m1, M &m2) m1,setxy(12, 15); m2-setxy(22, 25);lthis是一個(gè)隱含于每一個(gè)類的成員函數(shù)中的特殊的指針 l該指針是一個(gè)指向正在被某個(gè)成員

6、函數(shù)操作的對(duì)象的指針 l當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),編譯程序先將對(duì)象的地址賦給this指針,然后調(diào)用成員函數(shù) #include class A public: A()a = b = 0; A(int i,int j)a = i; b = j; void copy(A &aa); void print()cout a , b endl; private: int a,b;void A:copy(A &aa) if (this = &aa) return; *this = aa;void main() A a1, a2(3, 4); a1.copy(a2); a1.prin

7、t();Ans:3,4 對(duì)象數(shù)組是指數(shù)組元素為對(duì)象的數(shù)組l對(duì)象數(shù)組的定義格式 . 例如: DATE dates7 DATE dates235l對(duì)象數(shù)組的賦值class DATEpublic: DATE(int m,int d,int y); void print();private:int month,day,year;DATE dates4=DATE(7,22,1998), DATE(7,23,1998), DATE(7,24,1998), DATE(7,25,1998)或者 dates0=DATE(7,22,1998); dates1=DATE(7,23,1998); dates2=DAT

8、E(7,24,1998); dates3=DATE(7,25,1998);include class DATEpublic:DATE( )month = day = year = 0;DATE(int m, int d, int y)month = m;day = d;year = y;void print()cout Month= month ,day= day ,year= year endl; private:int month, day, year;void main() DATE dates5=DATE(7, 22, 1998), DATE(7, 23, 1998), DATE(7,

9、 24, 1998); dates3=DATE(7, 25, 1998); dates4=DATE(7, 26, 1998); for(int i=0; i5; i+)datesi.print();Ans:Month=7, Day=22, Year=1998Month=7, Day=23, Year=1998Month=7, Day=24, Year=1998Month=7, Day=25, Year=1998 Month=7, Day=26, Year=1998 指向一般數(shù)組的指針定義格式如下: (*)例如: int (*p)3; 指向?qū)ο髷?shù)組的指針定義格式如下: (*PL)4;includ

10、e int a3=1,2,3,4,5,6,7,8,9;void main() int (*pa)3(a); / 同 int (*pa)3;pa = a; for(int i=0;i3;i+) cout n; for(int j=o;j3;j+) cout *(*(pa+i)+j) ; cout n;1 2 34 5 67 8 9#include class M public: M()a = b = 0; M(int i,int j)a = i; b = j; void print()cout a . b endl; private: int a,b;void main() M m24; int

11、 x = 10, y = 20; for(int i=0; i2; i+) for(int j=0; j4; j+) mij=M(x += 2, y += 10); M(*pm)4(m); for(int i=0; i2; i+) cout endl; for(int j=0; j4; j+) (*(*(pm+i)+j).print(); cout endl;12.20 14.30 16.40 18.50 20.60 22.70 24.80 26.90 l指針數(shù)組指的是數(shù)組元素為指針的那類數(shù)組 l數(shù)組的元素可以是指向同一類型的一般指針,也可以是指向同一類類型的對(duì)象 l一般指針數(shù)組的格式如下:

12、*.l例 int *pa3; char *pc25; pa是一維指針數(shù)組名,該數(shù)組有3個(gè)元素是一個(gè)int 型指針。pc是二維指針數(shù)組名,該數(shù)組有10個(gè)元素,每一個(gè)元素是char型指針 #include #include const int N = 5;void main ( ) char *stringsN; char str80; cout At each prompt, enter a string:n; for(int i=0; iN; i+) cout Enter a string # i :; cin.getline(str, sizeof(str); stringsi = new

13、charstrlen(str) + 1; strcpy(stringsi, str); cout endl; for(i=0; iN; i+) cout String # i : stringi endl;At each prompt, enter a string:Enter a string # 0: abcdeEnter a string # 1: fghijEnter a string # 2: klmnoEnter a string # 3: pqrstEnter a string # 4: uvwxy輸出結(jié)果如下:String # 0: abcdeString # 1: fghij

14、String # 2: klmnoString # 3: pqrstString # 4: uvwxyl對(duì)象指針數(shù)組是指該數(shù)組的元素是指向?qū)ο蟮闹羔榣要求所有數(shù)組元素都是指向同一個(gè)類類型的對(duì)象的指針l其格式如下: *.#include class A public: A(int i=0, int j=0) a = i; b = j; void print ( ); private: int a, b;void A:print( ) cout a , b endl;void main( ) A a1(7, 8), a2, a3(5, 7); A * b3 = &a3, &a2,

15、&a1; for(int i=0; iprint( );Ans:5, 70, 07, 8l帶有參數(shù)的 main( )函數(shù)的格式如下: void main(int argc, char *argv )l第一個(gè)參數(shù)argc是 int 型的,它用來存放命令行參數(shù)的個(gè)數(shù)l第二個(gè)參數(shù)argv是一個(gè)一維的指針數(shù)組 argv0存放命令字 argv1存放命令行中第一個(gè)參數(shù) argv2存放命令行中第二個(gè)參數(shù).#include void main(int argc, char * argv ) cout The number of command line arguments is argc endl;

16、cout The program name is argv0 1) cout The command line arguments:n; for(int i=1;iargc;i+) cout argvi endl; Test prog1 prog2 prog3 prog4 則輸出結(jié)果如下:The number of command line arguments is 5The program name is test.exeThe command line arguments:prog1prog2prog3prog4l常類型是指使用類型修飾符const說明的類型l常類型的變量或?qū)ο蟮闹凳遣荒鼙?/p>

17、更新的 l定義或說明常類型時(shí)必須進(jìn)行初始化 l修飾符const可以用在類型說明符前,也可以用在類型說明符后 int const x = 2; 與 const int x = 2;是一樣的l定義或說明一個(gè)常數(shù)組可采用如下的形式: const 或者 const 例如: int const a5= 1, 2, 3, 4, 5; 說明數(shù)組a的各個(gè)元素是int型常量,即數(shù)組元素的值是不能被更新的l常對(duì)象是指對(duì)象常量,定義格式如下: const l例如:class A public: A(int i,int j)x = i;y = j; private: int x,y;const A a1(3,4);A

18、 const a2(8,19); 其中,a1和a2都是常對(duì)象,它們不能被更新 使用const修飾指針時(shí),由于const的位置不同,而含義不同l指針常量:內(nèi)容可變,不可指向其他 char * const ptr1 = stringptr1; ptr1 = stringptr2; 非法 * ptr1 = m; 合法l常量指針: 內(nèi)容不變,可指向其他 const char * ptr2 = stringptr1; * ptr2 = x; 非法 ptr2 = stringptr2; 合法l使用 const 修飾符說明的引用為常引用l常引用對(duì)象不能被更新,其定義格式如下: const & 例如:

19、 const double & v 其中,v是一個(gè)引用,它所引用的對(duì)象不會(huì)被更新l在實(shí)際應(yīng)用中,常指針和常引用往往用來做函數(shù)的形參,這樣的參數(shù)稱為常參數(shù)l使用常參數(shù),該函數(shù)不會(huì)更新參數(shù)所指向或所引用的對(duì)象,在參數(shù)傳遞過程不需要執(zhí)行拷貝初始化構(gòu)造函數(shù),改善運(yùn)行效率 #include const int N = 6;void print(const int * p, int n); / 常指針,內(nèi)容不變void main( ) int arrayN; for(int i=0; i arrayi; print(array, N);void print(const int * p, int n

20、) cout * p; for(int i=1; in; i+) cout , *(p+i); cout endl;執(zhí)行該程序輸入如下信息:1 2 3 4 5 6 輸出結(jié)果如下:1,2,3,4,5,6#include class K public: K(int i)k = i; /常成員函數(shù),有資格操作常量 int serk( ) constreturn k; private: int k;int add(const K & g1, const K & g2);void main() K k1(8), k2(17); int s = add(k1, k2); cout s en

21、dl;int add(const K & g1, const K & g2) int sum = g1.serk( ) + g2.serk( ); return sum;Ans:2525l使用const關(guān)鍵字進(jìn)行說明的成員函數(shù),稱為常成員函數(shù)l只有常成員函數(shù)才有資格操作常量或常對(duì)象 l類K的成員函數(shù) setk( )被說明為常成員函數(shù)。因此,它有資格對(duì)常引用 g1 和 g2 進(jìn)行操作 int sum = g1.serk( ) + g2.serk( );l常成員函數(shù)說明格式如下: () const;#include class R public: R(int r1, int r2)

22、R1 = r1; R2 = r2; void print( ); void print( ) const; private: int R1,R2;void R:print( ) cout R1 : R2 endl;void R:print( ) const cout R1 ; R2 endl;void main( ) R a(5, 4); a.print( ); const R b(20, 52); b.print( );Ans:5 : 420 ; 52 l類型修飾符 const 可以說明數(shù)據(jù)成員lconst類型對(duì)象必須被初始化,并且不能更新lconst數(shù)據(jù)成員只能通過成員初始化列表的方式,來

23、生成構(gòu)造函數(shù)對(duì)數(shù)據(jù)成員初始化#include class A public: A (int i); void print( ); const int & r; private: const int a; static const int b;const int A:b = 10;A:A(int i) : a(i), r(a) / 常數(shù) a = i = 100 常引用 r = a = i = 100 / 0 0void A:print( ) cout a : b : r endl;void main( ) A a1(100), a2(0); a1.print( ); a2.print(

24、);100:10:1000:10:0 l當(dāng)一個(gè)類的成員是某個(gè)類的對(duì)象時(shí)。該對(duì)象就為子對(duì)象l子對(duì)象實(shí)際上就是對(duì)象成員l子對(duì)象通過采用成員初始化表的方法來初始化對(duì)象l該類的構(gòu)造函數(shù)要包含對(duì)子對(duì)象的初始化l在成員初始化表中包含對(duì)子對(duì)象的初始化和對(duì)類中其他成員的初始化 例:B類中成員a是子對(duì)象,A類的對(duì)象作為B類的成員class A public: private:;class B public: private: A a;#include class A public: A(int i, int j)A1 = i; A1 = j; void print( )cout A1 , A2 endl; pr

25、ivate: int A1, A2;class B public: B(int i, int j, int k) : a(i, j), b(k) void print( ); private: A a; int b;void B:print( ) a.print( ); cout b endl;void main( ) B b(6, 7, 8); b.print( );6,78l堆對(duì)象是在程序運(yùn)行過程中根據(jù)需要隨時(shí)可以建立或刪除的對(duì)象l堆對(duì)象被創(chuàng)建在內(nèi)存一些空閑的存儲(chǔ)單元中,這些存儲(chǔ)單元被稱為堆l創(chuàng)建和刪除堆對(duì)象: new / c: malloc( ) 程序區(qū) delete / c: free

26、( ) 靜態(tài)存儲(chǔ) 堆 動(dòng)態(tài)區(qū) 棧 l new () 給出被創(chuàng)建對(duì)象的初始值, 如果省去括號(hào)和括號(hào)中的初始值,用缺省值l用 sizeof 來可以計(jì)算其大小lnew 運(yùn)算符返回一個(gè)指針l如果 new 運(yùn)算符不能分配到所需要的內(nèi)存,它將返回0,這時(shí)的指針為空指針l創(chuàng)建對(duì)象數(shù)組的格式如下: new 例如: A *ptr; ptr = new A5;l使用new 創(chuàng)建的數(shù)組時(shí),不能為該數(shù)組指定初始值,其初始值為缺省值。l刪除使用 new 創(chuàng)建的對(duì)象或一般類型的指針: delete A *ptr; ptr = new A(5,6); delete ptr;l刪除使用 new 創(chuàng)建對(duì)象數(shù)組: delete

27、A *ptr; ptr = new A5; delete ptr; 又:int *p; p = new int10; delete p;l必須使用于由運(yùn)算符new返回的指針l也適用于空指針(即其值為0的指針); l對(duì)一個(gè)指針只能使用一次delete操作l指針名只能用一對(duì)方括號(hào)符,并且不管所刪除數(shù)組的維數(shù),忽略方括號(hào)內(nèi)的任何數(shù)據(jù)。 #include class AA public: AA(int i, int j) A = i; B = j; cout Constructor.n; AA( )cout Destructor.n; void print( ); private: int A, B;

28、void AA:print( ) cout A , B endl;void main( ) AA a1, a2; a1 = new AA(1, 2); / if(!a1) a2 = new AA(5, 6); / coutprint( ); a2-print( ); delete a1; delete a2;Constructor.Constructor.1, 25, 6Destrutor.Destrutor.#include #include class B public: B(char *s, double n) strcpy(name, s); b = n; cout Construct

29、or.n; B( )cout Defaultn; B( )cout Destructor name endl; void getb(char *s, double& n) strcpy(s, name); n = b; private: char name80; double b;void main( ) B *p; double n; char s80; p = new B3; p0 = B(ma, 4.8); p1 = B(wang, 3.6); p2 = B(li, 3.1); for(int i=0; i3; i+) pi.getb(s, n); cout s , n endl

30、; delete p;DefaultDefaultDefaultConstructor / 建立匿名對(duì)象Destructor maConstructorDestructor wang ConstructorDestructor lima, 4.8wang, 3.6li, 3.1Destructor liDestructor wangDestructor ma#include #include void fun( ) int *p; if(p = new int) *p = 5; cout *p endl; delete p; else cout Heap error!n;void main( ) fun( ); int *pa; pa = new int5; if(!pa) cout Heap error!n; exit(1); for(int i=0; i5; i+) pai = i+1; for(i=0; i5; i+) cout pai ; cout endl; delete pa;51 2 3 4 5l類型轉(zhuǎn)換時(shí)將一種類型的值映射為另一種類型的值l類型轉(zhuǎn)換包含有自動(dòng)隱含的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論