第十一章类别物件的概念与设计

上传人:小** 文档编号:69562281 上传时间:2022-04-05 格式:DOC 页数:62 大小:800.50KB
返回 下载 相关 举报
第十一章类别物件的概念与设计_第1页
第1页 / 共62页
第十一章类别物件的概念与设计_第2页
第2页 / 共62页
第十一章类别物件的概念与设计_第3页
第3页 / 共62页
点击查看更多>>
资源描述
第十一章 類別物件的概念與設計目錄11-1. 結構與類別 2.11-2. 程式類別( class) 3.11-3.範例練習exp11_1:練習由結構變數(struct)的宣告與設定值,由此帶出 物件導向語言設定類別變數(class設定物件的宣告與值 311-4.範例練習exp11_2:練習物件object的宣告與使用 1311-5.範例練習exp11_3:練習範圍解析運算子(類別成員函數-類別名稱:: 函數名稱 )的使用方法 1.8.11-6. 建立者與破壞者 (建構子與解構子 ) 2.011-7. 範例練習 exp11_4-1: -1 練習建立者與破壞者 (建構子與解構子 ) .2011-8. 範例練習 exp11_4-2: -2練習使用建構子函數來設定起始值 2311-9. 範例練習 exp11_4-3: - 3練習使用有參數的建構子函數來設定起始值 .2611-10. 範例練習 exp11_4: - 4 練習使用解構子函數來清除與釋放物件 3011-11. 類別函數的使用 3.2.11-12. 範例練習 exp11_5: -1 練習使用範圍解析運算子 +將宣告區存在 *.h 檔案,而定義區存在另一個*.cpp檔案上 3.411-13. 類別與指標 3.6.11-14.範例練習exp11_5:- 2練習this-成員、(*this).成員3711-15.範例練習exp11_6:練習物件指標陣列的宣告、給值、更改設定 4011-16.範例練習exp11_7:第1小題,練習C#.NET物件陣列的宣告、給值、 更改設定 4.3.11-17. 自訂的命名空間Namespace4.711-18.範例練習exp11_7:第2小題,練習使用namespace的方式來建立公用的class類別變數4811-19. C#.NET建立屬性的新改良的可以分成兩種方法: 5411-20.範例練習exp11_8:練習C#.NET物件陣列的宣告、給值、更改設定 5.7.11-21. 類別與函數 6.1.11-22.範例練習exp11_7:練習static類別成員、const物件與函數.6211-23. 巢狀類別(nested class.)7.111-24.範例練習exp11_8:練習巢狀類別 7211-25. friend函數與類別(課本第9章專論friend函數與類別)7611-26.範例練習exp11_9:練習friend函數與類別7811-1.結構與類別(1) .觀念C語言程式設計是 以函數(function)為單元的結構化程式設計 C+語言程式設計是以類別(class)為單元的物件導向程式設計 前一章討論的結構只能包含資料成員,而類別從結構觀念衍生而可 以包含資料成員與成員函數,類別的資料變數稱為資料成員(datamember),處理資料的函數稱為成員函數(memberfunction)。(2) .結構化程式設計:結構化程式設計(structure programming或程序式程式設計(procedural program)是以程序(或稱函數)為主的程式。結構化程式的資料變數與存取資料的函數是獨立的,通常函數提供 處理資料變數的運算。(3) .物件導向程式設計物件導向程式設計(Object-Oriented Programming是以類別物件 為主的程式設計。類別的觀念是由結構衍生而來,結構只能包含資料變數,而類別則 可以包含資料變數與處理資料的函數。類別中的資料變數稱為資料成員(data membe),處理資料的函數 稱為成員函數(member function)。ssruccCMd inntee嘶; 咖篩; innheeght;ccasCMdbJiP 删cc:嚅eenghh; innwwdh; innheght;哺觸eaCubddrt)+rrWhh*rrWht+rrheeghht*rrl.eenjhih);reeuu?rrrengghh*widdhh* 炖egght;哺觸a()触肿(*咂hh +wddhhee3hht +hee?hh*ennghh;); i&voumnQ) reewrFhJeenighh*Wffih*Wht;類別與函數結構與函數11-2.程式類別(class )(1) .定義:類別(class)是一種使用者自定的資料型態,與結構(struct)一樣類 別是由許多資料型態集合而成。(2) .架構:資料成員(data member :程式設計師可以在類別中定義多種資料 型態的變數,如int、char、float、或string等等,這些資料變數稱 為類別的資料成員。成員函數(member function):類別中還包括存取資料成員的函數 稱為成員函數。11-3.範例練習exp11_1:練習由結構變數(struct)的宣告與設定 值,由此帶出物件導向語言設定 類別變數(class)設定物件的 宣告與值A. 練習目標: 練習由結構變數(struct)的宣告與設定值,由此帶 出物件導向語言設定類別變數(class)設定物件的宣 告與值先練習定義struct結構變數、宣告結構變數、存 取結構變數再練習定義class類別變數、宣告物件變數、存 取物件之資料成員C、D 課0辺辭上祗|設定並輸出七變it電腦名稱=宏产 設定並輸出小眈容變數.印表機慣格=32000 詮定並輸出愛數.印表機名稱=HPPress ansr kwy to continue.B. 重點:類別(class)的架構,包含兩個部分存放資料變數的稱為資料成員(Data Member) 處理資料的函數稱為成員函數(Memberfunction )C. 由範例練習來學習物件導向的觀念:(a) .在C+所支援的物件導向技術中,具有三個重要特徵:圭寸裝(en capsulatio n) 繼承(in herita nee) 多形(polymorphism)(b) . 封裝 (encapsulation )乃是指其有資料隱藏功用,可讓使用者只能透過方 法來操作物件,而無法直接存取它的特性資料本例printer的特性被定義在private之下,而 行為與 存取方法則被定義在public:下這樣設計的目的:乃在處理所謂資料隱藏的功用, 而讓使用物件的人只能透過行為或方法來操作物件,而 無法直接接觸到或更改到私有的特性資料。舉例:如何做到資料隱藏的目的class CMember private:/物件的特性被定義在private (私密的資料)int age;public:物件存取的方法與行為被定義在publicvoid setAge(i nt a) age = a; ;void mai n() tMember tm; CMember cm; tm.age = 25;直接存取資料cm.setAge(25);/必須透過內部方法來存取(c) .繼承(inheritanee)C+允許使用者建立新的類別來接收一個已存在類別的 資料與方法,並且視需要新增方法或修改繼承而來的方 法在一個類別的繼承關係中,被繼承者稱為基礎類別 (base class或父類別,而繼承者則稱為衍生類別 (derived class或子類別(d) .多形(polymorphism)按照指標所指物件的不同或是參考物件的不同來呼叫 對應物件的成員函數D. 如何使用類別(class)來建立物件導向的觀念 日常生活中的各式各樣的物件,都有其特性、行為、 使用方法,在C+物件導向語言中可以將之歸類成一 個類別變數(物件變數)在C+中建立類別變數的關鍵字:class所以,所定義出的類別(class是一種抽象化資料型態(abstract data type, ADT)具體描繪,它可以做到資料圭寸裝(encapsulatior與資料隱藏(data hidi ng)目的的一種概念B. C+如何使用類別(class)來描繪物件的特性、行為、使 用方法(a).有3種成員成員種類性質功能存取型態種類資料成員(data member)就是變數(基本型態變數、static 變數、struct 變數、union 變數.)這是描繪物件的特 性三種:private(私有的) public(公有的) protected(受保護的)成員函數(member fun cti on)又稱為方法(method)就是函數(一般函數、inline函 數、static 函數、const 函數)這是描繪物件的行 為、以及存取特性 資料的函數三種:private(私有的) public(公有的) protected(受保護的)靜態成員(static member)chp8-7 節(b).類別資料成員之存取權限制種類:有三種class類別名稱/指令1:私有成員的設定private:/指令2:私有成員的設定protected :/指令3:公有成員的設定public:/指令4:受保護成員的設定;關鍵字存取權限private(私有的)private是類別成員的預設存取型態,具有最咼的保護層級,代 表這種類型的成員是機密的,在類別中如果資料成員或成員函 數的前面沒有存取修飾詞,代表這些成員是使用預設的存取型 態(亦即private)o類別中被旦告為private的成員只能在類別中 使用或是開放給類別的朋友(friend,將於第10章講述)使用。,public(公有的)具有最低的保護層級,代表完全開放,因此可以在任何程式內 透過物件來使用這類型的成員,或者於子類別中使用。但是為 了實現資料隱藏,通常我們只會將成員函數宣告為public存取型態,這些public的成員函數可以作為提供外界存取類別內部 私有資料成員的介面。protected(受保護 的)具有第二高的保護層級,在一個繼承(將於第12章講述)關係中, 子類別可能希望存取繼承自父類別的成員,但是子類別又不想 開放這些成員給外部使用,這時父類別可以將它的成員宣告為 protected存取型態。父類別中使用這種存取型態的成員,除了 父類別內部和開放給類別的朋友使用外,還可在直系的子類別 中使用,故protected是專為繼承關係量身訂作的一種存取模式。E.編寫程式碼:#in elude viostream.h#in elude vstri ng.hstruct pe/宣告結構struct-資料型態char name10; / 也可以寫成 char *name; int price;int qty;class printer/宣告類別class-資料型態/private:沒有寫的話,預設是設定為privatechar name10;/ 也可以寫成 char *name;int price;int qty;public:;void setprice(i nt n) price = n;int getprice()retur n price;void set name(char a110) strcpy( name,a1);char *get name()return n ame;void mai n()pc acer;acer.name=宏碁; acer.price=35000; acer.qty=150;/ 也可以寫成 void setname(char *a1)/如果前面以char *a1指標來宣告,就以寫成name = a1;/注意:因為要傳回字串,所以要宣告為char */注意:傳遞字串時,必須以指標傳遞,故用name (而不是*name)/宣告為char *name才能直接設定字串cout 設定並輸出 struct 變數,電腦名稱= acer.name endl;prin ter ibm;ibm.name=HP;使用class類別變數,不可直接設定值,否則會有錯誤ibm.price=10000;這是因為類別變數的資料預設為private屬性,是被保護的,不可隨意更改ibm.qty=100;如何才能改變class類別變數的內容值呢? 設定 method又稱成員函數上面 public:/呼叫method(成員函數)才能改變class變數的內容值/注意:要呼叫類別內的函數時,必須先打該變數名稱ibm,然後再打該函數ibm.setprice(32000);ibm.set name(HP);/cout ibm.name endl;注意:在class類別變數中,連要觀看變數值,也被保護而不行cout 設定並輸出 class 變數,印表機價格 = ibm.getprice() endl;cout 設定並輸出 class 變數,印表機名稱 = ibm.getname() endl;F.比較:結構變數與類別變數相同相異結構變數struct都可以用來定義日 常生活的各種物件 都是一種可以描】术struct預設的資料存取為 public,故無法隱藏保護 資料類別變數class都P是 4種可以描述 許多資料型態的集 合class有 privat、protected 、public,可隱藏保護資 料(2) .宣告類別名稱 語法:class類別名稱private:定義私用成貝public:定義公用成員 ;範例一class Employeeprivate:類別私用成員;public:類別公用成員;範例二class Employee類別私用成員;public:類別公用成員;(3) .類別資料成員語法:資料型態變數名稱;範例一class Employeeint Empld;定義 private 資料成員char name20;定義 private 資料成員public:類別公用成員;;(4) .物件的宣告宣告語法:方法一(一般物件變數) 類別名稱物件名稱;範例一class Dogprivate:int height;int weight;public: void soun d()cout 汪!汪! endl;void mai n()/練習第一種物件變數宣告法:一般物件變數 Dog snu be;宣告語法:方法二(物件指標變數)類別名稱 物件指標名稱=new類別名稱;範例一class Dogprivate:int height; int weight;public:void soun d()cout 汪!汪! endl;;void mai n()/ /練習第二種物件變數宣告法:物件指標變數Dog* habago = new Dog;/ 此時 habago是個指標變數(5).物件的使用宣告語法:方法一(一般物件變數) 物件名稱資料成員物件名稱成員函數(參數)範例一class Dogprivate:int height;int weight;public: 汪!汪! endl;void soun d() cout ;void mai n() /練習第一種物件變數宣告法:Dog snu be; snu be.so un d();snu be.set_hei(40);snu be.set_wei(5);一般物件變數/使用方法:物件名稱/使用方法:物件名稱.資料成員.成員函數(參數)宣告語法:方法二(物件指標變數) 物件指標名稱-資料成員 物件指標名稱-成員函數(參數)範例一class Dogprivate:int height;int weight;public:void soun d() cout ”汪! 汪! ” en dl;void mai n()/ /練習第二種物件變數宣告法:物件指標變數Dog* habago = new Dog;/ 此時 habago是個指標變數cout sound();/使用方法:物件指標名稱- 資料成員habago-set_hei(90);/使用方法:物件指標名稱 - 成員函數(參數)habago-set_wei(20);11-4.範例練習exp11_2:練習物件object的宣告與使用A. 練習目標:練習物件object的宣告與使用 先練習兩種宣告物件object變數的方法 宣告一般物件變數:Dog a1;宣告物件指標變數:Dog *a2 = new Dog;練習兩種物件object變數的存取方法 一般物件變數:al.height = 50;物件指標變數:a2 -height = 50;_2.exe-史奴上史奴上匕的叫聲是:汪!汪!匕的身高是=40匕的體重是=5哈巴狗的叫聲是汪!汪! 哈巴狗的身高是=?0 哈巴狗的體重是:20.Press any k出y to continuaB. 編寫程式碼:#in elude viostream.hclass Dogprivate:int height;int weight;public:void soun d()cout 汪!汪! endl;int get_hei()return height;/因為要傳回整數值,故函數要宣告為intint get_wei()retur n weight;void set_hei(int a1)/因為要設定身高值,故函數要傳遞整數變數height = a1;void set_wei (int a1)weight = a1;void mai n()/練習第一種物件變數宣告法:一般物件變數Dog snu be;/錯誤寫法:cout 史奴比的叫聲是 snube.sound() endl;cout 史奴比的叫聲是 snu be.so un d();snu be.set_hei(40);snu be.set_wei(5);cout 史奴比的身高是 cout 史奴比的體重是 cout en dl;/使用方法:物件名稱.資料成員/使用方法:物件名稱.成員函數(參數) snu be.get_hei() en dl; snu be.get_wei() en dl;/ /練習第二種物件變數宣告法:物件指標變數/Dog habago; Dog* habago = new Dog; cout so un d(); habago-set_hei(90); habago-set_wei(20); cout 哈巴狗的身高是 cout 資料成員/使用方法:物件指標名稱- 成員函數(參數)get_hei() en dl; get_wei() en dl;(2).類別成員函數-1 ( 一般函數的宣告) 語法:傳回型態 函數名稱(參數列)/敘述區範例一class Employeeint Empld;/定義 private 資料成員char name20;/定義 private 資料成員public:void inputEmp() 宣告 public 成員函數cout Empld: EmpId;cout EmpName: n ame;void outputEmp() 宣告 public 成員函數cout EmpId: EmpId en dl; cout EmpName: n ame en dl;(3).類別成員函數-2 (使用範圍解析運算子)A. 原理:將類別(變數、或函數)的宣告與定義分開上下來寫B. 架構:/宣告類別定義資料成員x/宣告public成員函數in put/定義類別使用範圍解析運算子定義in put成員函數class類別名稱Aint x;public:void in put ();void 類別名稱 A:input() cout x = x;C. 語法範例:語法:傳回型態 類別名稱::函數名稱(參數列)/敘述區範例一class Employee int EmpId; char n ame20; public:定義private資料成員/疋義private資料成員void in putEmp(); void outputEmp();宣告public成員函數原型宣告public成員函數原型;void Employees nputEmp()定義inputEmp成員函數cout EmpId: EmpId;cout EmpName: n ame;宀口void Employee:outputEmp() 定義 outputEmp 成員函數cout EmpId: EmpId en dl; cout EmpName: n ame en dl;(4) .建立類別物件語法:類別名稱物件名稱;範例一int mai n()Employee emp1; /宣告 Employee類別物件 return 0;程式正常結束(5) .存取類別成員 語法:物件名稱類別成員();範例一int mai n()丄Employee empl;empl.intputEmp();呼叫物件函數 inputEmpemp1.outputEmp(); 呼叫物件函數 outputEmp return 0;程式正常結束11-5.範例練習exp11_3:練習範圍解析運算子(類別成員函數 -類別名稱:函數名稱)的使用方法A. 練習目標:使用 C+.NET範圍解析運算子:將函數的定義內容放到class類 別外面來寫練習範圍解析運算子(類別成員函數-類別名稱: 函數名稱)的使用方法宣告類別:class studenf;定義類別函數:void stude nt:i npu();在主程式中呼叫類別函數:csie1a.i nput(;)cT d:_t課Ml義上iw請輸入學生學號:25請輸入學生姓名:張三丰請輸入學生分數:站學生學號:25 -姓名:張三丰,分数:吗B. 編寫程式碼:#include stdafx.h#include #in clude vconi o.husing namespacestd;class studentint no;char n ame10;int score;/string tel;在C+6.0、C+.NET的 class類別中宣告string 變數會有問題,但在 C#就可以使用了public :void in put();void output();/在C+6.0, C+.NET的class類別定義最後,要加上;,但在C#就不用了void student:input()cout no;cout n ame;cout score;void student:output()cout 學生學號: no ” ,姓名: name ,分數: score endl;int _tmain( int argc, _TCHAR* argv)stude nt csie1a;csie1a.i叩ut();/呼叫類別名稱:函數名稱()的方法:物件名稱.函數名稱cout en dl;csie1a.output();getch();return 0;11-6.建立者與破壞者(建構子與解構子)(1).功能:建立者函數(又名建構子,constructor):可處理類別物件的初始化工 作(給定初值)破壞者函數(又名解構子,destructor):可處理類別物件生命週期結束 時,進行清除物件與釋放物件的工作11-7.範例練習exp11_4-1 : -1練習建立者與破壞者(建構子與 解構子)A. 練習目標:使用C#.NET練習建立者與破壞者(建構子與解構子)B. 先練習使用C#寫出和ex.8_3相同的結果重點一:在class內可以使用string宣告變數了string name;/ 在 C+6.0、C+.NET的 class 類別中宣告 string變數會有問題,但在 C#就可以使用了重點二:在class內的函數前面不用寫public:public void input() /而是直接在每個類別函數前面加上public重點三:在主程式 main中宣告類別的方法:student csie1a = new student();/ 必須使用 new 來建立新的物件實體C. 物件變數設定值的方法有3種方法一:自行設定函數定義函數:public void input(string b1,int b2, int b3).使用函數:a1.input( “tea ”,15,100); |方法二:使用無參數建構子函數方法定義函數: public product() 使用函數: product a1 = new product。; 方法三:使用有參數建構子函數方法定義函數:public product(string b1,int b2, int b3)使用函數:product a1 = new product( “tea ” ,15,100);D. 編寫程式碼:先使用C#寫出和ex.8 3相同的結果/應用程式的主進入點。/STAThread static void Main()Application.Run(new Form1();class productstring name;int price;int qty;/注意:在C#中,類別的函數不需要寫在public:之後了/而是直接在每個類別函數前面加上publicpublic void input(string b1,int b2, int b3)name = b1;price = b2;qty = b3;public void output()MessageBox.Show(name= + name+ , price = + price + , qty = + qty); private void button1_Click( object sender, System.EventArgs e)/在C#中如果要宣告類別變數,不可用C+6.0/C+.net的方法來宣告/必須使用new來建立新的物件實體product a1 = new product();a1.input(textBox1.Text,lnt32.Parse(textBox2.Text),lnt32.Parse(textBox3.Text);a1.output();(2) .宣告建立者函數(constructor )-無參數語法:類別名稱(參數列)/建立者本體功能:使用時機:類別中的資料成員,無法再一開始宣告時,順便指定初值, 解決方法:使用建立者函數,就可以將資料成員給定起始值要求:建構子,必須與類別名稱相同,並且不可傳回值注意:如果我們沒有替類別撰寫解構子,C+編譯器會自動內建預設建構子,例如Employee() 範例一class Employee定義private資料成員/定義private資料成員int EmpId; char n ame20;定義無參數建立者函數(指定初值用)指定Empld初值/指定name初值public:Employee() EmpId = 0;strcpy( name, ZZZ); ;範例二class Employee int EmpId;/定義 private 資料成員char name20;定義 private 資料成員public:Employee();/宣告無參數建立者函數原型;Employee:Employee() 實現無參數建立者函數(指定初值用)EmpId = 0;指定 EmpId 初值strcpy(name, ZZZ);指定 name 初值;11-8.範例練習exp11_4-2 : -2練習使用建構子函數來設定起始值名稱價格* I OInecme= CokeT prite = 15, qty = 100A. 何謂建構子函數:建立者函數,可以將資料成員給定起始值不需要呼叫任何函數(input),系統會自動先到建立者函數來 設定預設值只要宣告變數的同時(student csiela;),就會自動呼叫建立者 函數來設定預設值B. 練習使用建構子函數來設定起始值 刪除之前所設定的in put函數 使用建構子函數來設定起始值public student() /建構子函數在定義時,不需給定型態類別,例 女口: void, int.C. 編寫程式碼:使用建構子函數來設定起始值/應用程式的主進入點。/STAThreadstatic void Main()Application.Run( new Form1();class productstring name;int price;int qty;public void input( string b1, int b2, int b3)name = b1;price = b2;qty = b3;public product。name = apple;price = 30;qty = 100;public void output()MessageBox.Show(name= + name+ , price = + price + , qty = + qty);private void button1_Click( object sender, System.EventArgs e) -product a1 = new product();a1.input(textBox1.Text,lnt32.Parse(textBox2.Text),lnt32.Parse(textBox3.Text);a1.output();(2).宣告建立者參數一有參數語法:類別名稱(參數型態 參數1,參數型態 參數2,)/建立者本體範例一class Employeeint Empld;/定義 private 資料成員char name20;/定義 private 資料成員public:Employee nt id, char *n) /宣告建立者函數原型EmpId = id;指定 EmpId=參數值strcpy(name, n);指定 name數值;int mai n() Employee emp1(123, TOM); emp1.Empld=123,emp1. name=TOMEmployee emp2(456, JOE); emp2.Empld=456,emp2. name=JOEreturn 0;程式正常結束範例二class Employeeint EmpId;定義 private 資料成員char name20;定義 private 資料成員public:Employee(i nt id, char *n);/ 宣告建立者原型;Employee:Employee(i nt id, char *n) / 定義有參數建立者EmpId = id;指定 EmpId=參數值strcpy(name, n);指定 name數值;int mai n() Employee emp1(123, TOM); emp1.Empld=123,emp1. name=TOMEmployee emp2(456, JOE); emp2.Empld=456,emp2. name=JOEreturn 0;程式正常結束11-9.範例練習exp11_4-3 : - 3練習使用有參數的建構子函數來設 定起始值A. 何謂有參數的建構子函數:只要宣告變數的同時,順便給定起始值(student csiela (35,虛竹 ,95);),就會自動呼叫建構子函數來設定預設值B. 練習使用有參數的建構子函數來設定起始值刪除之前所設定的in put函數 刪除之前所設定的一無參數建構子函數 使用有參數之建構子函數來設定起始值public student(int a1,string a2,int a3)/ 建構子函數在定義時,不需給定型態類別,例如:void, i nt.C. 編寫程式碼:使用建構子函數來設定起始值/應用程式的主進入點。/STAThread static void Main()Application.Run( new Form1();class productstring name; int price;int qty;public void input( string b1, int b2, int b3)name = b1;price = b2; qty = b3;public product。name = apple;price = 30;qty = 100;public product(string b1,int b2, int b3)/有參數建構子函數(建立起始值)/注意:建構子函數在定義時,不需給定型態類別,例如:void,int.name = b1;price = b2; qty = b3;public void output()MessageBox.Show(name= + name+ , price = + price + , qty = + qty); private void button1_Click( object sender, System.EventArgs e) -product a1 = new product();a1.input(textBox1.Text,lnt32.Parse(textBox2.Text),lnt32.Parse(textBox3.Text);/有參數建構子函數(建立起始值)product a1 = new product(textBox1.Text,lnt32.Parse(textBox2.Text),lnt32.Parse(textBox3.Text);a1.output();(2).預設建立者參數語法:類別名稱(參數型態 參數1=起始值1,參數型態 參數2=起始值2,) /建立者本體範例一class Employeeint Empld;定義 private 資料成員char name20;/定義 private 資料成員public:Employee nt id, char *n);/宣告建立者函數原型Employee:Employee(i nt id = 0, char *n = ZZZ) EmpId = id;指定 EmpId 初值strcpy(name, n);指定 name 初值;int mai n()Employee emp1;Employee emp2(123, TOM);Employee emp3(456);return 0;程式正常結束範例(複製資料成員)int mai n()Employee emp1(123, JOHN), emp2;emp2 = emp1;emp2.Empld=123emp2. name=JOHNreturn 0;程式正常結束(3).破壞者函數(解構子)(destructor )語法:類別名稱()功能:使用時機:解構子的功用剛好與建構子相反,它的功用就是在程式結束時或 是物件生命週期結束後,於記憶體中執行清除與釋放物件的動作, 要求:解構子函數,必須與類別名稱相同,並且在前面加上符號C+會自動內建解構子,來注意:一般我們不需要替類別撰寫解構子,因為 幫助我們清除解構子的工作範例一class Employee定義private資料成員/定義private資料成員宣告建立者函數宣告破壞者函數int Empld; char n ame20;public:Employee。;Employee();範例(複製資料成員)int mai n()Employee emp1(123, JOHN), emp2; emp2 = empl;emp2.Empld=123emp2. name=JOHNreturn 0;程式正常結束11-10.範例練習exp11_4 : - 4練習使用解構子函數來 清除與釋放 物件A. 何謂解構子函數:在程式結束時,系統會自動呼叫 解構子函數來執行清除 記憶體與釋放物件的動作注意:一般我們不需要替類別撰寫解構子,因為C+會自動內建解構子,來幫助我們清除解構子的工作B. 練習使用解構子函數來 清除與釋放物件使用解構子函數來 清除與釋放物件 student() /解構子的前面,不用再打public 了./如果沒有寫解構子函數,系統會自動幫我們加上去C. 編寫程式碼:使用建構子函數來設定起始值/ /應用程式的主進入點。/ /STAThreadstatic void Main()Application.Run( new Form1();class productstring name;int price;int qty;public void input( string b1, int b2, int b3)name = b1;price = b2;qty = b3;public product()name = apple;price = 30;qty = 100;public product( string b1, int b2, int b3)name = b1;price = b2;qty = b3;product()/注意:解構子的前面,不用再打public 了/如果沒有寫解構子函數,系統會自動幫我們加上去MessageBox.Show(”目前正在執行清除與釋放物件的工作”);public void output()MessageBox.Show(name= + name+ , price = + price + , qty = + qty); private void button1_Click( object sender, System.EventArgs e)product al = new product();a1.input(textBox1.Text,lnt32.Parse(textBox2.Text),lnt32.Parse(textBox3.Text);/product al = new product(Coke,15,200);/product al = new product(textBox1.Text,lnt32.Parse(textBox2.Text),lnt32.Parse(textBox3.Text);a1.output();11-11.類別函數的使用(1).注意:到目前為止,可以發現類別中的函數可包含有三類: 建構子、解構子、成員函數(member function)。成員函數可以是一般函數、inline函數、常數函數、靜態函數、覆 寫函數、多載函數與虛擬函數等(2) .類別成員函數-使用範圍解析運算子、而且分開在2個檔案來寫A. 原理:將類別(變數、或函數)的宣告與定義分開上下來寫(3) .種類:宣告區與定義區,同時存在同一個檔案上(*.cpp) 將宣告區存在*.h檔案,而定義區存在另一個*.cpp檔案上/宣告類別A. 架構: class類別名稱A定義資料成員 xint x;public:/宣告public成員函數in putvoid in put ();void類別名稱A:input() 定義類別;使用範圍解析運算子定義in put成員函數cout x = x;B. 語法範例:語法:傳回型態 類別名稱::函數名稱(參數列)/敘述區範例一定義private資料成員/定義private資料成員class Employee int Empld; char n ame20;public:void inputEmp();宣告public成員函數原型void outputEmp();宣告public成員函數原型;void Employees nputEmp()定義inputEmp成員函數cout EmpId: EmpId;cout EmpName: n ame;宀口void Employee:outputEmp() 定義 outputEmp 成員函數cout EmpId: EmpId en dl;c
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!