![c--中構造函數(shù)和析構函數(shù)講解課件_第1頁](http://file4.renrendoc.com/view/059228a55ea38724321584fb9fb835c5/059228a55ea38724321584fb9fb835c51.gif)
![c--中構造函數(shù)和析構函數(shù)講解課件_第2頁](http://file4.renrendoc.com/view/059228a55ea38724321584fb9fb835c5/059228a55ea38724321584fb9fb835c52.gif)
![c--中構造函數(shù)和析構函數(shù)講解課件_第3頁](http://file4.renrendoc.com/view/059228a55ea38724321584fb9fb835c5/059228a55ea38724321584fb9fb835c53.gif)
![c--中構造函數(shù)和析構函數(shù)講解課件_第4頁](http://file4.renrendoc.com/view/059228a55ea38724321584fb9fb835c5/059228a55ea38724321584fb9fb835c54.gif)
![c--中構造函數(shù)和析構函數(shù)講解課件_第5頁](http://file4.renrendoc.com/view/059228a55ea38724321584fb9fb835c5/059228a55ea38724321584fb9fb835c55.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Visual C+程序設計第10章 構造函數(shù) 和析構函數(shù)10.1 構造函數(shù)10.2 析構函數(shù)10.3 實現(xiàn)類型轉(zhuǎn)換和 拷貝的構造函數(shù)10.4 構造函數(shù)和對象成員第10章 構造函數(shù)和析構函數(shù)給對象的數(shù)據(jù)成員賦值有二類(四種)方法:1. 定義時賦值(初始化)(1)用數(shù)據(jù)列表初始化(數(shù)據(jù)成員為公有訪問權限);(2)用構造函數(shù)初始化。2. 定義后賦值(1)用成員函數(shù)賦值-回顧第9章示例3; (2)用同類型的對象賦值。如:class A public: int a,b;void set(int x,int y)a=x;b=y; ; void main() A a1=5,10,a2,a3; a2.set(
2、15,20); a3=a1;10.1 構造函數(shù)10.1.1 構造函數(shù)的概念1. 構造函數(shù)是實現(xiàn)數(shù)據(jù)成員初始化的特殊的成員函數(shù); 2. 構造函數(shù)與類同名,沒有類型,也不返回值;3. 創(chuàng)建對象時,構造函數(shù)被自動調(diào)用。每創(chuàng)建一個對象都必須調(diào)用一次構造函數(shù),每調(diào)用一次構造函數(shù)必定創(chuàng)建一個對象。10.1.2 構造函數(shù)的種類1. 普通構造函數(shù):普通參數(shù);2. 拷貝構造函數(shù):參數(shù)為對象的引用。 一個類至少有上述兩個構造函數(shù),可以有更多的構造函數(shù)(構造函數(shù)允許重載),以實現(xiàn)不同形式對象的創(chuàng)建。 10.1 構造函數(shù)10.1.3 構造函數(shù)的定義1. 類中定義格式 類名(形參列表) . /函數(shù)體,對數(shù)據(jù)成員賦值2.
3、 類中說明,類外定義(1) 類中說明 類名(形參列表);(2)類外定義 類名:類名(形參列表) . /函數(shù)體10.1 構造函數(shù)例10-1 定義表示平面點的類Point及其構造函數(shù)。 class Pointfloat x,y;public:Point(float a,float b);Point(float a) x=y=a;void print() cout(x,y“)n”; ; Point: Point(float a,float b) x=a; y=b; 10.1 構造函數(shù)10.1.4 構造函數(shù)產(chǎn)生對象建立對象時,必須提供與構造函數(shù)形參一致的實參,其基本格式只有如下兩種形式:類名 對象名(
4、實參); 類名 對象名;例10-2 用例10-1定義的類定義對象,并初始化。class Point float x,y;public: Point(float a,float b); Point(float a) x=y=a; void print() cout(x,y“)n”; ;Point: Point(float a,float b) x=a; y=b; void main() Point p1(5),p2(10,15); p1.print();p2.print(); 10.1 構造函數(shù)主函數(shù)中,能否添加下列語句: Point p3;10.1.5 缺省的構造函數(shù)1. 缺省構造函數(shù)的種類(
5、1)系統(tǒng)自動產(chǎn)生的構造函數(shù),如下所示: 類名() (2)用戶定義的沒有參數(shù)的構造函數(shù);(3)用戶定義的所有參數(shù)都有缺省值的構造函數(shù)。2. 用缺省構造函數(shù)創(chuàng)建對象的格式:類名 對象名;3. 使用時的注意(1)只有在用戶沒有定義構造函數(shù)時,系統(tǒng)才自動產(chǎn)生構造函數(shù);(2)類中可能沒有缺省的構造函數(shù);(3)一個類最多只能有一個缺省的構造函數(shù)。10.1 構造函數(shù)例10-3 缺省構造函數(shù)的使用。class Pointfloat x,y;public:Point( ) x=0; y=0; Point(float a ,float b ) x=a; y=b; /Avoid print() cout(x,y“)
6、n”; ;void main() Point p1 , p2(1,2);p1.print(); p2.print(); 10.1 構造函數(shù)主函數(shù)能否增加:Point p3();p3.print();能否對A行作如下修改?=0 =010.1.6 構造函數(shù)和new運算符1. 用new運行符產(chǎn)生動態(tài)對象(1)產(chǎn)生單個對象(可以初始化);(2)產(chǎn)生數(shù)組對象(不能初始化)。如:class C float r,i;public: C (float r1 ,float i1) r=r1; i=i1; cout“構造n”; C () r=i=0; cout“缺省構造n”; ;void main() C *p1
7、=new C,*p2=new C (2,-3), *p3=new C5; 10.1 構造函數(shù)2. 用new為指針成員分配動態(tài)空間 當類的數(shù)據(jù)成員為指針時,在構造函數(shù)中應: 先用new運算符為指針動態(tài)分配空間; 然后再對指針所指空間賦值。如: class Array int*p; .; /p表示10個元素的一維數(shù)組則如下的構造函數(shù)都是錯誤的:Array(int *t)p=t; Array (int *t)*p=*t;Array (int *t)for(int i=0;i10;i+)pi=ti;Array (int *t)p=new int10; p=t; / *p=*t;正確的應為:Array
8、(int *t) p=new int10; / 分配動態(tài)空間 for(int i=0;i10;i+)pi=ti; / 對動態(tài)空間賦值 10.1 構造函數(shù)1. 析構函數(shù)的概念用于撤消對象的成員函數(shù)。2. 定義格式(1)類中定義 類名() . /函數(shù)體(2)類中說明,類外定義 類中說明 類名();/類中說明 類外定義 類名:類名()/類外定義 . /函數(shù)體10.2 析構函數(shù)3. 使用時注意:(1)析構函數(shù)的名稱由運算符與類名組成;(2)析構函數(shù)無函數(shù)類型,無參數(shù),且不返回值;(3)析構函數(shù)不可以重載,每個類只有一個析構函數(shù);(4)類中通常不需要定義析構函數(shù),而由系統(tǒng)自動產(chǎn)生一個如下的缺省析構函數(shù):
9、 類名:類名() (5)當類中用new 運算符分配了動態(tài)空間時,必須定義析構函數(shù),并在函數(shù)體中用delete運算符釋放動態(tài)空間。4. 構造函數(shù)與析構函數(shù)的調(diào)用過程在創(chuàng)建對象時,調(diào)用構造函數(shù);在撤消對象時,調(diào)用析構函數(shù);所以它們的調(diào)用過程(順序)通常是相反的。10.2 析構函數(shù)10.3.1 實現(xiàn)類型轉(zhuǎn)換的構造函數(shù) 當一個對象被賦值為一個數(shù)字,如果這個數(shù)字可以放入某個構造函數(shù)實現(xiàn)對這個構造函數(shù)的調(diào)用時,則該賦值語句成立。其實質(zhì)是以所給的數(shù)據(jù)為參數(shù)調(diào)用普通的構造函數(shù)初始化對象,此時的構造函數(shù)稱為類型轉(zhuǎn)換的構造函數(shù)。例10-4 用類型轉(zhuǎn)換的構造函數(shù)初始化對象。class Ex int x,y;publ
10、ic: Ex(int a, int b=10) x=a; y=b; cout“x=”x“,y=”y“n”; Ex() coutx“,釋放對象。n”;void main() Ex e1(5); Ex e2=15; e1=20; cout“End.n”;10.3 實現(xiàn)類型轉(zhuǎn)換和拷貝的構造函數(shù)其中:Ex e2=15;等同于Ex e2(15);e1=20;等同于e1=Ex(20);x=5,y=10 x=15,y=10 x=20,y=1020,釋放對象。End.15,釋放對象。20,釋放對象。10.3.2 完成拷貝功能的構造函數(shù) 拷貝功能的構造函數(shù)實現(xiàn):用一個已建立的對象初始化同類型的對象,其調(diào)用格式為
11、:類名 新對象名(已建立對象名); 或類名 新對象名=已建立對象名; 例10-5 用拷貝構造函數(shù)初始化對象。class Ex int x,y;public: Ex(int a,int b) x=a; y=b; cout“x=”x“,y=”y“,普通構造。n”; Ex(Ex &t)/拷貝功能的構造函數(shù) x=t.x; y=t.y; cout“x=”x“,y=”y“,拷貝構造。n”; ;void main() Ex e1(5,10); Ex e2(e1); Ex e3=e2; 10.3 實現(xiàn)類型轉(zhuǎn)換和拷貝的構造函數(shù)x=5,10, 普通構造x=5,10, 拷貝構造x=5,10, 拷貝構造與普通構造函數(shù)
12、相似,若用戶不定義拷貝功能構造函數(shù),系統(tǒng)自動產(chǎn)生一個缺省的拷貝功能構造函數(shù),它把已建立對象各數(shù)據(jù)成員的值依次賦給新對象。其定義如下: 類名:類名(類名 &對象名) *this=對象名; 用戶通常可以直接使用缺省的拷貝功能構造函數(shù),但在以下情況下必須重新定義:(1)新建對象與已建立對象的數(shù)據(jù)有差異;如:Ex2 e2(e1); (2)數(shù)據(jù)成員中有指針,并使用了動態(tài)內(nèi)存。類的構造函數(shù)有兩類、多種形式,使用時應加以區(qū)分。10.3 實現(xiàn)類型轉(zhuǎn)換和拷貝的構造函數(shù)例10-6 用普通構造函數(shù)和拷貝構造函數(shù)創(chuàng)建對象。class A public:A(int x=1)coutx“t”;A(A&t)cout“拷貝t
13、”;void main()A a1,a2(2),a3=3;coutn;A a4=A(4),a5=a1,a6(a1); coutn;a1=5;a2=a1; a3=A(0); coutn;10.3 實現(xiàn)類型轉(zhuǎn)換和拷貝的構造函數(shù)運行結果: 1234 拷貝拷貝 拷貝50程序中共創(chuàng)建了幾個對象? 1. 對象成員的概念 類的數(shù)據(jù)成員為其他已定義類的對象,該成員稱為對象成員。 2. 初始化對象成員的方法 在構造函數(shù)中以對象名調(diào)用對象所屬類的構造函數(shù)完成,其基本格式為: 類名:類名(形參表):對象名(實參表) /初始化普通成員 3. 當前對象在初始化(構造函數(shù)調(diào)用)時的順序 (1)先完成對象成員的初始化,有多
14、個對象成員時,先說明的先初始化; (2) 再完成普通成員的初始化。 即先調(diào)用對象成員所屬類的構造函數(shù),再執(zhí)行自身類的函數(shù)體。 4. 對象的撤消(析構函數(shù)調(diào)用)順序:與建立順序相反。10.4 構造函數(shù)和對象成員例10-7 含對象成員類的構造函數(shù)。class A int a;public: A(int x=0) a=x; cout“A()n”; A() couta“A()n”; ; class B int b;public: B(int x=0) b=x; cout“B()n”; B () coutb “B()n”; ; class C int c; B b1; A a1; B b2;public
15、: C(int x,int y,int z):a1(x),b1(y),b2(z) c=x+y+z; cout“C()n”; C() coutc “A()n”; ; void main() C c1(1,2,3); 10.4 構造函數(shù)和對象成員對象說明順序決定構造函數(shù)調(diào)用順序?qū)ο笳{(diào)用構造函數(shù)語句決定對象成員的值一、選擇題1、以下有關析構函數(shù)的敘述不正確的是 。A、析構函數(shù)沒有任何函數(shù)類型B、析構函數(shù)的作用是在撤銷對象時收回分配的內(nèi)存空間C、析構函數(shù)可以有形參D、一個類只有一個析構函數(shù)2、關于類的缺省構造函數(shù),下列說法正確的是 。A、類的缺省構造函數(shù)沒有參數(shù)B、類的缺省構造函數(shù)是由系統(tǒng)自動產(chǎn)生的空
16、函數(shù)C、每個類均可定義缺省的構造函數(shù)D、每個類均有且有一個缺省的構造函數(shù)3、通??截惓跏蓟瘶嬙旌瘮?shù)的參數(shù)是 。A、某個對象的名稱 B、某個對象的成員名C、指向某個對象的指針名 D、某個對象的引用名課堂練習4、設有如下類的定義:class Ex int *p;public:Ex()delete p;Ex(int x=0)p=new int(x);則下列對象的定義中,不正確的是 。A、Ex ex; B、Ex ex1(50),ex2=ex1;C、Ex ex=Ex(50); DEx ex=50;5、下列關于構造函數(shù)說法不正確的是 。A、構造函數(shù)必須與類同名B、構造函數(shù)可以省略不寫C、構造函數(shù)必須有返回
17、值D、在構造函數(shù)中可以對類中的成員進行初始化6、已定義類A,該類構造函數(shù)的參數(shù)都沒有缺省值,執(zhí)行語句:A a1(2),a2(1,2),*p=new A3;則自動調(diào)用該類的缺省構造函數(shù)的次數(shù)為 。A、1 B、3 C、2 D、5課堂練習7、下列程序中出現(xiàn)編譯錯誤的是 。#include class Aint a,b;public:A(int x,int y) a=x;b=y;void print() coutatbprint(); /DA、A行 B、B行 C、C行 D、D行課堂練習8、下列程序中不出現(xiàn)編譯錯誤的是 。class Aint a,b;A()a=10;b=20;public:A(int
18、x) a=b=x;void main()A a1; / AA a2(1); / BA a3=1,2; / CA a4(1,2); / DA、A行 B、B行 C、C行 D、D行課堂練習9、下面程序的運行結果為 。 #includeclass Aint num;public:A(int i) num=i;A(A &a) num=a.num+;void print() coutnum;void main()A a(10),b(a);a.print(); b.print();coutendl;A、1010 B、1011 C、1111 D、1110課堂練習二、填空題1、執(zhí)行下列語句時,系統(tǒng)自動調(diào)用了構造
19、函數(shù) 次:Myclass p13,*p23,p3,*p4=p1,*p5=new Myclass; 2、當類A的成員是類B的對象時,則把類B中的類A的對象稱為 成員。 3、對象成員的初始化是通過 調(diào)用 完成的。 4、缺省的一般構造函數(shù),除了系統(tǒng)自動生產(chǎn)的外,還有用戶定義的的構造函數(shù)或 的構造函數(shù)三種形式,但一個類中最多有 個缺省的一般構造函數(shù)。 5、以同類型的已有對象初始化新建對象時,調(diào)用的構造函數(shù)是 ,使用時有兩種具體形式:(1);(2)。課堂練習6、下面程序段的執(zhí)行結果是 。#include class Point int x,y; public:Point()x=y=0;Point(int
20、 a,int b)x=a;y=b;Point(Point &P);void show() coutx=x,y=yn; ;Point:Point(Point &P) x=P.x+10;y=P.y+10; void main()Point p1,p2(3,5),p3=p2;p1.show();p2.show();p3.show();課堂練習7、下面程序段的執(zhí)行結果是 。#include class Aint a;public:A(int x=0) a=x; coutA()t;A() coutA()t; ;class Bint b;public:B(int x) b=x; coutB()t;B()
21、coutB()t;class CB b1;A a1;public:C(int x,int y):a1(x),b1(y) coutC()t;C()coutC()t;void main()C c1(10,20);coutn;課堂練習8、下列程序定義點類Point和線段類Line,并求線段的長度。完善程序。程序的運行結果 點:(1,3) 點:(2,4) 線段長度為:1.41421#include #include class Pointint x;public:int y;Point(int=0,int=0);int getx()return x;void print() cout“點:(”x,y“
22、)t”; ; x=a; y=b; class LinePoint p1,p2;public:Line(int a,int b,int c,int d):p1(a,c),p2(b,d) void show() p1.print(); p2.print(); double distance() double x= , y=p1.y-p2.y; return sqrt(x*x+y*y); ;void main() Line l(1,2,3,4); l.show();cout“線段長度為:” n; 課堂練習9、下列程序的運行結果是 。#include class Aint a, b;public:A(int x, int y) a=x;b=y;void show( ) coutatbn;void main( ) A a13=A(1,2),A(3,4),A(5,6);a10.show( );a11.show( );a12.show( );課堂練習三、程序設計題練習1、定義一個類Array,求一個二維數(shù)組各列元素的平均值,并將所求得的平均值按順序存入一個一維數(shù)組中,具體要求如下:(1)私有數(shù)據(jù)成員 int a45; float b5; 數(shù)組b依次存放數(shù)組a的各列元素的平均值(2)公有成員函數(shù) Array(int t5,int n):用數(shù)組t初始化數(shù)組a(n為數(shù)組t的行數(shù)),并將數(shù)組b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025項目法律服務合同
- 2023八年級英語下冊 Unit 4 Why don't you talk to your parents Section A 第1課時(1a-2d)說課稿 (新版)人教新目標版
- 7多元文化 多樣魅力《多彩的世界文化》(說課稿)-統(tǒng)編版道德與法治六年級下冊
- 2025合同模板承包合同書(車輛)范本
- 2025中外合資公司勞動合同協(xié)議書
- 直飲水施工方案
- 食堂餐廳售賣設備施工方案
- 2024年春七年級語文下冊 第4單元 13 葉圣陶先生二三事說課稿 新人教版
- 《1 信息并不神秘》說課稿-2023-2024學年華中師大版信息技術三年級上冊
- Unit 2 Expressing yourself Part A Lets spell(說課稿)-2024-2025學年人教PEP版(2024)英語三年級下冊001
- 137案例黑色三分鐘生死一瞬間事故案例文字版
- 【魔鏡洞察】2024藥食同源保健品滋補品行業(yè)分析報告
- 2024-2030年中國潤滑油行業(yè)發(fā)展趨勢與投資戰(zhàn)略研究報告
- 《洗煤廠工藝》課件
- 鋼結構工程施工(第五版) 課件 2項目四 高強度螺栓
- 機票預訂行業(yè)營銷策略方案
- 大學生就業(yè)指導(高等院校學生學習就業(yè)指導課程)全套教學課件
- 《實驗診斷學》課件
- 眼的解剖結構與生理功能課件
- 小學網(wǎng)管的工作總結
- 診所校驗現(xiàn)場審核表
評論
0/150
提交評論