版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第4章 類與對象7/23/20221面向對象程序設計與Visual C+6.0教程 本章主要內容:類的定義與使用 類的數(shù)據(jù)成員和成員函數(shù)類成員的訪問控制方法類的實現(xiàn)和對象的創(chuàng)建訪問類成員的方法構造函數(shù)與析構函數(shù)復制構造函數(shù)及深復制與淺復制類作用域靜態(tài)成員類的友元常對象7/23/20222面向對象程序設計與Visual C+6.0教程4.1 類 類是對具有相同屬性(數(shù)據(jù))和行為(操作)的一組對象的抽象。面向對象程序設計的核心任務是類的確定和對象的創(chuàng)建,而不是將各個具體的對象逐一進行描述。忽略各具體對象的非本質特征,抽象出本質特征與共性,然后形成類的概念,對象是類的實例。 從語法分析,類也是一種
2、數(shù)據(jù)類型,即用戶自定義的數(shù)據(jù)類型,而一個一個具體的對象可以視為屬于這一數(shù)據(jù)類型的一個變量。7/23/20223面向對象程序設計與Visual C+6.0教程1. 類的定義 類是對具有相同屬性和行為的一組對象的抽象與統(tǒng)一描述; 類的定義包括行為和屬性兩個部分; 屬性以數(shù)據(jù)表示,行為通過函數(shù)實現(xiàn)。7/23/20224面向對象程序設計與Visual C+6.0教程C+類定義的格式: class 類名 public: 公有數(shù)據(jù)成員和成員函數(shù); protected: 保護數(shù)據(jù)成員和成員函數(shù); private: 私有數(shù)據(jù)成員和成員函數(shù); 各成員函數(shù)的實現(xiàn);7/23/20225面向對象程序設計與Visual
3、 C+6.0教程 class Student /定義學生類Studentpublic: /聲明類成員 void Getinfo(char* pname,char* pid,char Sex, int a,double s); void modify(float s); void display();private: char* name; char* id; char sex; int age; double score; /類定義以分號結束 類定義舉例7/23/20226面向對象程序設計與Visual C+6.0教程類定義和使用時應注意: 類的定義中不能對數(shù)據(jù)成員進行初始化。 公有部分是類對
4、外的接口,一般應先說明公有部分 類的任何成員都必須指定訪問屬性,一般將數(shù)據(jù)成員定義為私有成員或保護成員,將成員函數(shù)定義為公有成員。 類中的數(shù)據(jù)成員可以是C+語法規(guī)定的任意數(shù)據(jù)類型,但不能用存儲類型auto、register或extern進行修飾。7/23/20227面向對象程序設計與Visual C+6.0教程注意事項(續(xù)) 類的成員可以是其他類的對象,但不能以類自身的對象作為本類的成員,而類自身的指針和引用可以作為類的成員。 類定義必須以分號“;”結束。 在C語言中,結構體只有數(shù)據(jù)成員,而C+的結構體不僅有數(shù)據(jù)成員,而且有成員函數(shù)及訪問權限控制。 類與結構體的區(qū)別: 沒有明確指定類成員的訪問
5、權限時,C+結構體的成員是公有的,而類的成員是私有的。7/23/20228面向對象程序設計與Visual C+6.0教程2 訪問控制 類的訪問屬性有: Public Protected Private 各種訪問方式的功能如下表7/23/20229面向對象程序設計與Visual C+6.0教程 類成員訪問控制表 訪問控制含義屬 性public公有成員類的外部接口protected保護成員僅允許本類成員函數(shù)及派生類成員函數(shù)訪問private私有成員僅允許本類成員函數(shù)訪問7/23/202210面向對象程序設計與Visual C+6.0教程 類的成員函數(shù)是實現(xiàn)對封裝的數(shù)據(jù)進行操作的惟一途徑,是現(xiàn)實類的
6、行為屬性的成員。 一般將成員函數(shù)聲明為函數(shù)原型,在類外具體實現(xiàn)成員函數(shù)。 如果成員函數(shù)已經(jīng)在類中定義,則無須在類外實現(xiàn)。 類中定義的成員函數(shù)自動成為內聯(lián)函數(shù)。 4.2 成員函數(shù) 7/23/202211面向對象程序設計與Visual C+6.0教程1. 成員函數(shù)的定義 返回值類型 類名:成員函數(shù)名(參數(shù)表) 函數(shù)體 7/23/202212面向對象程序設計與Visual C+6.0教程2. 內聯(lián)成員函數(shù) 在類中實現(xiàn)的成員函數(shù)自動成為內聯(lián)函數(shù);內聯(lián)成員函數(shù)可以減少函數(shù)調用開銷,提高程序的執(zhí)行效率;內聯(lián)成員函數(shù)增加了程序代碼的長度;一般將調用頻繁且代碼少的成員函數(shù)定義為內聯(lián)成員函數(shù);若內聯(lián)成員函數(shù)在類
7、外實現(xiàn),需要以inline限定。 7/23/202213面向對象程序設計與Visual C+6.0教程4.3 對象 類描述了一類問題的共同屬性和行為,對象是類的實例或實體。類與對象的關系,如同C+基本數(shù)據(jù)類型和該類型的變量之間的關系。 7/23/202214面向對象程序設計與Visual C+6.0教程1. 對象的定義 對象的定義格式如下: 類名 對象名1,對象名2,對象名n;7/23/202215面向對象程序設計與Visual C+6.0教程 必須在定義了類之后,才可以定義類的對象; 類定義僅提供該類的類型定義。 僅僅定義了類,系統(tǒng)并不會分配存儲空間,只有定義了對象后,編譯系統(tǒng)才會在內存中預
8、留空間。 定義對象應注意7/23/202216面向對象程序設計與Visual C+6.0教程 聲明了類及其對象以后,就可以訪問對象的公有成員(包括數(shù)據(jù)成員和成員函數(shù))。 對象成員的訪問包括: 圓點訪問形式 指針訪問形式2. 類成員的訪問 7/23/202217面向對象程序設計與Visual C+6.0教程(1) 圓點訪問形式 對象名.公有成員7/23/202218面向對象程序設計與Visual C+6.0教程(2) 指針訪問形式 形式一: 對象指針變量名-公有成員形式二: (*對象指針變量名).公有成員 7/23/202219面向對象程序設計與Visual C+6.0教程New 運算符介紹本章
9、例4-7程序中出現(xiàn)了New運算符;New運算符用于動態(tài)內存分配,在后續(xù)章節(jié)中有專門介紹;New 運算符使用形式:指針所指向的數(shù)據(jù)類型應與new 運算符后的數(shù)據(jù)類型相同,若申請成功則返回分配單元的首地址給指針變量,否則返回空指針值(即0)給指針變量。例如: (1) 指針變量=new 數(shù)據(jù)類型; (2) 指針變量=new 數(shù)據(jù)類型(初始值); (3) 指針變量=new 數(shù)據(jù)類型元素個數(shù);7/23/202220面向對象程序設計與Visual C+6.0教程New 運算符舉例 int *p1; double *p2; p1=new int(12); p2=new double 100;分別表示動態(tài)分配
10、了用于存放整型數(shù)據(jù)的內存空間,將初值12寫入該內存空間,并將首地址值返回指針p1;動態(tài)分配了具有100個雙精度實型數(shù)組元素的數(shù)組,同時將各存儲區(qū)的首地址指針返回給指針變量p2; 7/23/202221面向對象程序設計與Visual C+6.0教程對象是類的實例,在創(chuàng)建了對象以后,編譯系統(tǒng)將給對象分配存儲空間。不同對象的區(qū)別主要表現(xiàn)在兩個方面: 對象名:即對象的標識符(外在區(qū)別); 對象屬性:即數(shù)據(jù)成員的值,(內在區(qū)別)對象在定義的時需要初始化。對象生命期結束時要進行清理工作。 C+中對象的創(chuàng)建與初始化、對象生命期結束時的清理工作,分別由構造函數(shù)和析構函數(shù)完成。 4.4 構造函數(shù)與析構函數(shù) 7/
11、23/202222面向對象程序設計與Visual C+6.0教程 構造函數(shù)的功能是在定義對象時由編譯系統(tǒng)自動調用來創(chuàng)建對象并初始化對象。 構造函數(shù)的函數(shù)名與類名相同。其定義格式如下: 1. 構造函數(shù) 類名:類名(參數(shù)表) 函數(shù)語句7/23/202223面向對象程序設計與Visual C+6.0教程 構造函數(shù)的函數(shù)名與類名相同; 構造函數(shù)可以有任意類型的參數(shù),但沒有函數(shù)返回值類型; 構造函數(shù)一般被定義為公有成員; 構造函數(shù)在創(chuàng)建對象時由編譯系統(tǒng)自動調用; 構造函數(shù)只能一次性地影響對象的數(shù)據(jù)成員初值。 構造函數(shù)的特殊性質: 7/23/202224面向對象程序設計與Visual C+6.0教程 如果
12、類中沒有定義構造函數(shù),系統(tǒng)將自動生成一個默認形式的構造函數(shù),用于創(chuàng)建對象,默認構造函數(shù)形式: 默認構造函數(shù)類名:類名() 7/23/202225面向對象程序設計與Visual C+6.0教程使用構造函數(shù)時應注意: 構造函數(shù)是特殊的成員函數(shù),函數(shù)體可寫在類中,也可寫在類外; 若構造函數(shù)沒有參數(shù),則稱為無參構造函數(shù);若構造函數(shù)帶有參數(shù),則稱為帶參數(shù)構造函數(shù); 構造函數(shù)可以重載; 每個類都必須有一個構造函數(shù)。如果程序沒有顯式定義構造函數(shù),編譯系統(tǒng)將自動生成一個默認形式的構造函數(shù)。 7/23/202226面向對象程序設計與Visual C+6.0教程2. 析構函數(shù) 析構函數(shù)不能有參數(shù),也不能重載。定義
13、格式如下: 類名:類名() 函數(shù)語句7/23/202227面向對象程序設計與Visual C+6.0教程析構函數(shù)的自動調用 除對象生存期結束時自動調用外,在以下兩種情況下析構函數(shù)會被調用: 如果一個對象被定義在一個函數(shù)體內,則當這個函數(shù)結束時。 若一個對象是使用new運算符被動態(tài)創(chuàng)建的,在使用delete運算符釋放它時。 7/23/202228面向對象程序設計與Visual C+6.0教程默認析構函數(shù) 若沒有顯式定義析構函數(shù),則系統(tǒng)自動生成一個默認形式的析構函數(shù)。系統(tǒng)自動生成的默認構造函數(shù)形式如下: 類名:類名()7/23/202229面向對象程序設計與Visual C+6.0教程3. 復制構
14、造函數(shù) 復制構造函數(shù)也是一種特殊的成員函數(shù);功能是用一個已知的對象初始化一個被創(chuàng)建 的同類新對象; 復制構造函數(shù)的參數(shù)是本類對象的引用; C+為每一個類定義了一個默認的復制構造函數(shù);可以根據(jù)需要定義自己的復制構造函數(shù),從而實 現(xiàn)同類對象之間數(shù)據(jù)成員的值傳遞。 7/23/202230面向對象程序設計與Visual C+6.0教程復制構造函數(shù)的定義格式class 類名public: 類名(參數(shù)表); /構造函數(shù) 類名(const 類名 &對象名); /復制構造函數(shù) ;類名:類名(const 類名 &對象名) 函數(shù)語句7/23/202231面向對象程序設計與Visual C+6.0教程復制構造函數(shù)的
15、調用 以下三種情況下由編譯系統(tǒng)自動調用:聲明語句中用類的一個已知對象初始化該類的另一個對象時;當對象作為一個函數(shù)實參傳遞給函數(shù)的形參時,需要將實參對象去初始化形參對象時,需要調用復制構造函數(shù); 當對象是函數(shù)的返回值時,由于需要生成一個臨時對象作為函數(shù)返回結果,系統(tǒng)需要將臨時對象的值初始化另一個對象,需要調用復制構造函數(shù)。7/23/202232面向對象程序設計與Visual C+6.0教程復制構造函數(shù)的特點: 復制構造函數(shù)名與類名相同,并且沒有返回值類型; 復制構造函數(shù)可寫在類中,也可以寫在類外; 復制構造函數(shù)有且僅有一個參數(shù),即是同類對象的引用; 如果沒有顯式定義復制構造函數(shù),系統(tǒng)自動生成一個
16、默認形式的復制構造函數(shù)。 7/23/202233面向對象程序設計與Visual C+6.0教程默認復制構造的形式 類名:類名(const 類名 &對象名);7/23/202234面向對象程序設計與Visual C+6.0教程4. 淺復制與深復制 關于淺復制:在用一個對象初始化另一個對象時,只復制了數(shù)據(jù)成員,而沒有復制資源,使兩個對象同時指向了同一資源的復制方式稱為淺復制;默認復制構造函數(shù)所進行的是簡單數(shù)據(jù)復制,即淺復制。 關于深復制:通過一個對象初始化另一個對象時,不僅復制了數(shù)據(jù)成員,也復制了資源的復制方式稱為深復制; 自定義復制構造函數(shù)所進行的復制是深復制。 7/23/202235面向對象程
17、序設計與Visual C+6.0教程4.5 靜態(tài)成員 靜態(tài)成員提供了同一個類不同對象數(shù)據(jù)成員的共享機制。靜態(tài)成員包括: 靜態(tài)數(shù)據(jù)成員 靜態(tài)成員函數(shù) 7/23/202236面向對象程序設計與Visual C+6.0教程static 靜態(tài)成員的定義; 例如: static int total; static void display(); 1. 靜態(tài)成員的定義與引用 7/23/202237面向對象程序設計與Visual C+6.0教程類名:靜態(tài)成員名;靜態(tài)成員的引用 7/23/202238面向對象程序設計與Visual C+6.0教程2. 靜態(tài)數(shù)據(jù)成員 類型 類名:靜態(tài)數(shù)據(jù)成員=初始化值;對于類的
18、普通數(shù)據(jù)成員,每一個對象都各自擁有一個副本;對于靜態(tài)數(shù)據(jù)成員,每個類只擁有一個副本;靜態(tài)數(shù)據(jù)成員初始化與一般數(shù)據(jù)成員初始化有所不同,其初始化格式如下: 7/23/202239面向對象程序設計與Visual C+6.0教程3. 靜態(tài)成員函數(shù) 靜態(tài)成員函數(shù)是指使用static關鍵字聲明的成員函數(shù);與靜態(tài)數(shù)據(jù)成員一樣,靜態(tài)成員函數(shù)不是某一個類的成員,而是屬于整個類;靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)數(shù)據(jù)成員,而訪問非靜態(tài)數(shù)據(jù)成員則可以通過對象進行調用。 7/23/202240面向對象程序設計與Visual C+6.0教程應用靜態(tài)成員函數(shù)的優(yōu)點 靜態(tài)成員函數(shù)只能直接訪問該類中的靜態(tài)數(shù)據(jù)成員,而不會影響
19、該類的其他數(shù)據(jù)成員;采用靜態(tài)成員函數(shù),可以在創(chuàng)建對象之前處理靜態(tài)數(shù)據(jù)成員,這是普通成員函數(shù)不能實現(xiàn)的;靜態(tài)成員函數(shù)在同一個類只有一個成員函數(shù)的地址映射,節(jié)約了計算機系統(tǒng)的開銷;靜態(tài)成員函數(shù)不能直接訪問類中的非靜態(tài)成員。如果靜態(tài)成員函數(shù)需要訪問非靜態(tài)成員,需要通過對象名才能訪問該對象的非靜態(tài)數(shù)據(jù)成員。 7/23/202241面向對象程序設計與Visual C+6.0教程4.6 友元 若需要在類的外部直接訪問類的私有數(shù)據(jù)成員,在C+中,通過定義友元可以實現(xiàn)這一功能。友元包括: 友元函數(shù) 友元類 7/23/202242面向對象程序設計與Visual C+6.0教程1. 友元的作用 C+的友元提供了不
20、同類或對象的成員函數(shù)之間、類的成員函數(shù)與普通函數(shù)之間進行數(shù)據(jù)共享的機制。7/23/202243面向對象程序設計與Visual C+6.0教程非對稱性(單向的) 若B是A的友元,若沒有特別聲明,則A不是B的友元。非傳遞性 若B是A的友元,C是B的友元,若沒有特別聲明,則C不是A的友元。 友元的性質7/23/202244面向對象程序設計與Visual C+6.0教程2.友元函數(shù) 如果類外的非本類成員函數(shù)需要訪問類的私有數(shù)據(jù)成員或保護成員,則需要將該函數(shù)聲明為類的友元函數(shù)。 友元函數(shù)的聲明格式如下: friend 返回值類型 函數(shù)名(參數(shù)表);7/23/202245面向對象程序設計與Visual C
21、+6.0教程友元函數(shù)可以訪問類中的私有數(shù)據(jù)成員,但友元函數(shù)不是類的成員函數(shù);友元函數(shù)可以是一個普通函數(shù),也可以是另外一個類的成員函數(shù);友元函數(shù)不是類的成員,因而與成員函數(shù)存在區(qū)別,友元函數(shù)不能直接使用對象名,而必須通過對象操作數(shù)據(jù)成員 。使用友元函數(shù)時需注意 7/23/202246面向對象程序設計與Visual C+6.0教程3. 友元類 不僅函數(shù)可以聲明為一個類的友元。一個類也可以聲明為另一個類的友元。若一個類被聲明為另一個類的友元,則該類的所有成員函數(shù)都是另一個類的友元。 7/23/202247面向對象程序設計與Visual C+6.0教程friend 類名; 友元類的聲明格式:7/23/
22、202248面向對象程序設計與Visual C+6.0教程4.7 類作用域及對象的生存期 C+標識符的作用域有函數(shù)原型作用域、塊作用域(局部作用域)、函數(shù)作用域、類作用域和文件作用域。 除類作用域外,其他作用域已在第3章介紹,7/23/202249面向對象程序設計與Visual C+6.0教程1. 類作用域 類作用域:是指在類中定義的數(shù)據(jù)成員、成員函數(shù)及其他標識符的作用范圍僅限定在該類中,即類作用域是指在類的聲明中用一對花括號括起來的部分。 7/23/202250面向對象程序設計與Visual C+6.0教程2. 對象的生存期 生存期是一個時間概念; 類對象的生存期是指對象從被創(chuàng)建開始到生存期
23、結束為止的時間; 類對象在聲明時被創(chuàng)建,在釋放時被終止。7/23/202251面向對象程序設計與Visual C+6.0教程局部對象。局部對象是被定義在一個程序快或函數(shù)體內的對象,它的作用域范圍小、生存期短。靜態(tài)對象。靜態(tài)對象被定義在一個文件中,它的作用域從定義時開始到文件結束時止,它的作用域范圍大,生存期也較長。全局對象。全局對象的作用在域整個程序中,它的作用域范圍最大、生存期也最長。 類對象的生存期包括:7/23/202252面向對象程序設計與Visual C+6.0教程 一般情況下,如果C+程序中出現(xiàn)兩個變量、函數(shù)名或類名的名字完全相同,就會產(chǎn)生沖突。 解決命名沖突的辦法有兩個: 第一種
24、解決方法是重新使用不同的標識符名,但有時為了程序的可讀性,必須使用相同的標識名。 C+提供了第二種解決命名沖突的方法名空間。 4.8 名空間7/23/202253面向對象程序設計與Visual C+6.0教程枚舉類型變量的聲明格式如下:1. 名空間的定義 namespace 名空間標識符名 成員的聲明;7/23/202254面向對象程序設計與Visual C+6.0教程使用名空間的成員時要用名空間名進行標識,從而有效解決了標識符沖突。名空間成員的訪問方式如下: 2. 名空間成員的訪問 名空間標識符名:成員名7/23/202255面向對象程序設計與Visual C+6.0教程為解決數(shù)據(jù)共享與數(shù)據(jù)安全的統(tǒng)一,C+引入了常類型。常類型是指使用關鍵字const說明的類型,常類型的變量或對象成員的值在程序運行期間是不可改變的。 4.9 常類型 7/23/202256面向對象程序設計與Visual C+6.0教程常引用的說明形式如下: const 類型說明符 &引用名; 例如:int n=18;const int &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新科版選修化學下冊月考試卷含答案
- 2025年冀教新版九年級地理下冊月考試卷含答案
- 2025年粵教滬科版選修4地理上冊月考試卷含答案
- 2025年度銀行網(wǎng)點門禁安全系統(tǒng)安裝與維護服務合同4篇
- 2025年滬科版選擇性必修1歷史下冊月考試卷含答案
- 2025年外研版七年級生物上冊階段測試試卷
- 2025年度嬰幼兒奶粉消費者滿意度調查與分析合同4篇
- 二零二五年度農業(yè)土地租賃合同農業(yè)可持續(xù)發(fā)展戰(zhàn)略4篇
- 二零二五版馬戲團演出服裝與化妝服務合同3篇
- 二零二五年度出國定居寵物安置與照料合同2篇
- 小學網(wǎng)管的工作總結
- 2024年銀行考試-興業(yè)銀行筆試參考題庫含答案
- 泵站運行管理現(xiàn)狀改善措施
- 2024屆武漢市部分學校中考一模數(shù)學試題含解析
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術標準》
- 第19章 一次函數(shù) 單元整體教學設計 【 學情分析指導 】 人教版八年級數(shù)學下冊
- 浙教版七年級下冊科學全冊課件
- 弧度制及弧度制與角度制的換算
- 瓦楞紙箱計算公式測量方法
- DB32-T 4004-2021水質 17種全氟化合物的測定 高效液相色譜串聯(lián)質譜法-(高清現(xiàn)行)
- DB15T 2724-2022 羊糞污收集處理技術規(guī)范
評論
0/150
提交評論