C程序設(shè)計(jì)課件:第11章 類(lèi)_第1頁(yè)
C程序設(shè)計(jì)課件:第11章 類(lèi)_第2頁(yè)
C程序設(shè)計(jì)課件:第11章 類(lèi)_第3頁(yè)
C程序設(shè)計(jì)課件:第11章 類(lèi)_第4頁(yè)
C程序設(shè)計(jì)課件:第11章 類(lèi)_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十一章 類(lèi)1本章主要內(nèi)容11.1 從結(jié)構(gòu)到類(lèi)11.2 軟件方法的發(fā)展必然 11.3 定義成員函數(shù) 11.4 調(diào)用成員函數(shù)11.5 保護(hù)成員 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn) 11.7 再論程序結(jié)構(gòu) 作業(yè)2簡(jiǎn)介類(lèi)是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心,它實(shí)際上是一種新的數(shù)據(jù)類(lèi)型,也是實(shí)現(xiàn)抽象類(lèi)型的工具。類(lèi)是對(duì)某一類(lèi)對(duì)象的抽象,而對(duì)象是類(lèi)的實(shí)例。311.1 從結(jié)構(gòu)到類(lèi)1. C+中的結(jié)構(gòu)在C中,結(jié)構(gòu)體不允許有成員函數(shù)。 在C+中,結(jié)構(gòu)體允許有成員函數(shù)。在默認(rèn)情況下,結(jié)構(gòu)成員是“公共”(public)的。在默認(rèn)情況下,類(lèi)的成員是“私有”(private)的。411.1 從結(jié)構(gòu)到類(lèi) #include struct A /

2、public: int x,y; void Show() coutx=x“, y=yendl; ; int main() A a; a.x=3; a.y=9; /公有成員可以在結(jié)構(gòu)外被訪問(wèn) a.Show(); /* 執(zhí)行結(jié)果: x=3, y=9 */511.1 從結(jié)構(gòu)到類(lèi)2.類(lèi)的定義與構(gòu)成類(lèi)的定義形式: class 類(lèi)名標(biāo)識(shí)符 private: protected: public: ;關(guān)鍵字class表示類(lèi),類(lèi)名標(biāo)識(shí)符一般首字母用大寫(xiě)字母表示,以示與對(duì)象名的區(qū)別。關(guān)鍵字private,protected,public是訪問(wèn)控制說(shuō)明符,表示存儲(chǔ)控制。611.1 從結(jié)構(gòu)到類(lèi)類(lèi)可以由成員構(gòu)成。成員可

3、以是數(shù)據(jù)成員(屬性)、或成員函數(shù)(方法)。 成員可以是“私有”(private)的、“公有”(public)的、或“保護(hù)”(protected)的。私有成員(private)、保護(hù)成員(protected) : 只允許類(lèi)本身的其他成員訪問(wèn),任何本類(lèi)以外的成員(對(duì)象)均不能訪問(wèn)。本類(lèi)以外的對(duì)象只能通過(guò)該類(lèi)的公有成員函數(shù)進(jìn)行訪問(wèn)。公有成員(public): 提供的外部接口,允許類(lèi)的可使用者訪問(wèn)。7class Savings private: unsigned accountNumber; /賬號(hào) float balance; /結(jié)算額 public: unsigned int deposit(un

4、signed amount) balance+=amount; return balance; ; void fn() Savings a,b; /定義類(lèi)的對(duì)象 /a. balance =100.5; error私有成員不能在類(lèi)外被訪問(wèn) /b. balance =200.5; error a.deposit(100); /ok公有成員可以在類(lèi)外被訪問(wèn) 8 #include class A private: int x,y; public: void Set(int a,int b)x=a; y=b; void Show( ) coutx=x“, y=yendl; ; int main() A

5、a; /定義類(lèi)的對(duì)象 / a.x=3; a.y=9; error私有成員不能在類(lèi)外被訪問(wèn) a.Set(3,9); /ok公有成員可以在類(lèi)外被訪問(wèn) a.Show(); /* 執(zhí)行結(jié)果: x=3, y=9 */9主函數(shù)函數(shù)1函數(shù)3函數(shù)2函數(shù)2-1函數(shù)1-3函數(shù)1-2函數(shù)1-1函數(shù)3-1函數(shù)3-2數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)3圖11-1 算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系11.2 軟件方法的發(fā)展必然較早的軟件開(kāi)發(fā),用結(jié)構(gòu)化程序設(shè)計(jì)方法。 程序=(算法)+(數(shù)據(jù)結(jié)構(gòu))即算法是一個(gè)獨(dú)立的整體,數(shù)據(jù)結(jié)構(gòu)(包含數(shù)據(jù)類(lèi)型與數(shù)據(jù))也是一個(gè)獨(dú)立的整體。兩者分開(kāi)設(shè)計(jì),以算法(函數(shù)或過(guò)程)為主。 10 算法數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)只能

6、與一個(gè)對(duì)應(yīng) 數(shù)據(jù)結(jié)構(gòu)算法2算法1同一種操作的不同實(shí)現(xiàn)是多余的圖11-2 舊的程序定律給算法與數(shù)據(jù)結(jié)構(gòu)帶來(lái)不適11.2 軟件方法的發(fā)展必然 后來(lái)的軟件開(kāi)發(fā), 把數(shù)據(jù)結(jié)構(gòu)與算法看作一個(gè)獨(dú)立功能模塊。 程序=(算法+數(shù)據(jù)結(jié)構(gòu)) 即算法與數(shù)據(jù)結(jié)構(gòu)是一個(gè)整體,算法總是離不開(kāi)數(shù)據(jù)結(jié)構(gòu),算法含有對(duì)數(shù)據(jù)結(jié)構(gòu)的訪問(wèn),算法只能適用于特定的數(shù)據(jù)結(jié)構(gòu)。因此設(shè)計(jì)一個(gè)算法適合于訪問(wèn)多個(gè)數(shù)據(jù)結(jié)構(gòu)是不明智的,而且數(shù)據(jù)結(jié)構(gòu)由多個(gè)算法來(lái)對(duì)其進(jìn)行同種操作也是多余的。 1111.2 軟件方法的發(fā)展必然現(xiàn)在,程序就是許多對(duì)象在計(jì)算機(jī)中相繼表現(xiàn)自己,而對(duì)象就是一個(gè)個(gè)程序?qū)嶓w。 對(duì)象 =(算法+數(shù)據(jù)結(jié)構(gòu)) 程序 =(對(duì)象+對(duì)象+ )算法+

7、數(shù)據(jù)結(jié)構(gòu)算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)算法算法+數(shù)據(jù)結(jié)構(gòu)算法+數(shù)據(jù)結(jié)構(gòu)算法+數(shù)據(jù)結(jié)構(gòu)算法+數(shù)據(jù)結(jié)構(gòu)算法+數(shù)據(jù)結(jié)構(gòu)對(duì)象圖11-3 構(gòu)成程序的對(duì)象1211.3 定義成員函數(shù)1.成員函數(shù)的命名成員函數(shù)命名: 類(lèi)標(biāo)識(shí)符:成員函數(shù)標(biāo)識(shí)符(參數(shù)表) 其中: 是作用域區(qū)分符。 例:A:Set(int a,int b); /類(lèi)A的成員函數(shù): Set(int a,int b); Savings:deposit(unsigned amount); /類(lèi)Savings的成員函數(shù):Deposit(unsigned amount);說(shuō)明: 不同作用域的對(duì)象可以同名,在一個(gè)作用域內(nèi)使用可以使用的同名對(duì)象時(shí)應(yīng)加域區(qū)分符(:)以區(qū)分

8、。13#include class Tdate private: int month; int day; int year; public: void Tdate:Set(int m,int d,int y) /置日期值 month=m; day=d; year=y; int Tdate:IsLeapYear() /判是否閏年 return (year%4=0&year%100!=0)|(year%400=0); void Tdate:Print() /輸出日期值 cout month / day / year endl; ;int main() Tdate a; a.Set(2,4,1998

9、); a.Print(); /運(yùn)行結(jié)果:2/4/1998類(lèi)名加在函數(shù)名之前而不是函數(shù)返回類(lèi)型前14int month; /全局變量int day;int year;void Set(int m,int d,int y) /非成員函數(shù) :month=m; /給全局變量賦值,此處可省略: :day=d; :year=y;class Tdate private: int month; int day; int year; public: void Tdate:Set(int m,int d,int y) :Set(m,d,y); /調(diào)用非成員函數(shù) ;152.在類(lèi)中定義成員函數(shù) 成員函數(shù)的定義代碼可以

10、放在類(lèi)定義中類(lèi)中定義的成員函數(shù)的規(guī)模一般都比較小,語(yǔ)句只有15句。在類(lèi)中定義的成員函數(shù)默認(rèn)為內(nèi)聯(lián)函數(shù),即使沒(méi)有明確用inline標(biāo)示。在C+中,類(lèi)定義通常在頭文件中,因此這些成員函數(shù)定義也伴隨著進(jìn)入頭文件,而內(nèi)聯(lián)函數(shù)是可以放在頭文件中的。Page 1611.3 定義成員函數(shù)163.在類(lèi)之后定義成員函數(shù)將類(lèi)定義和其成員函數(shù)定義分開(kāi),是目前開(kāi)發(fā)程序的通常做法。把類(lèi)定義(頭文件)看成是類(lèi)的外部接口,類(lèi)的成員函數(shù)定義看成是類(lèi)的內(nèi)部實(shí)現(xiàn)。在一個(gè)文件中實(shí)現(xiàn)類(lèi)定義和其成員函數(shù)定義。11.3 定義成員函數(shù)17/tdate.h 類(lèi)定義class Tdate private: int month; int day

11、; int year; public: void Set(int m,int d,int y); int IsLeapYear(); void Print();/tdate.cpp 成員函數(shù)定義#include #include tdate.hvoid Tdate:Set(int m,int d,int y) month=m; day=d; year=y;int Tdate:IsLeapYear() return(year%4=0&year%100!= 0) | (year%400=0);void Tdate:Print() cout month / day / year endl;/tdat

12、e.cpp#include class Tdate private: int month; int day; int year; public: void Set(int m,int d,int y); int IsLeapYear(); void Print();void Tdate:Set(int m,int d,int y) month=m; day=d; year=y;int Tdate:IsLeapYear() return (year%4=0&year%100!= 0) | (year%400=0);void Tdate:Print() cout month / day / yea

13、r endl;18 4.重載成員函數(shù)同一個(gè)類(lèi)的成員函數(shù)可以重載,方法與非成員函數(shù)重載相同。不同類(lèi)的成員函數(shù)同名,不是函數(shù)重載。類(lèi)的成員函數(shù)與非成員函數(shù)同名,不是函數(shù)重載。 11.3 定義成員函數(shù)19char grade(float value) /int main() Student s; Slope t; s.grade(3.2); /Student:grade(float) float v=s.grade(); /Student:grade( ) char c=grade(v); /: grade(float) float m=t.grade( ); /Sloap:grade( )clas

14、s Student public: float grade( ) / float grade(float newGPA) / / protected: /;class Slope public: float grade()/ / protected: /;2011.4 調(diào)用成員函數(shù)1.調(diào)用一個(gè)成員函數(shù)必須通過(guò)對(duì)象去調(diào)用,要指定對(duì)象和成員名,否則無(wú)意義。例如: #include #include tdate.h Tdate s; /全局對(duì)象名s void func( ) month=10; /error:month是成員還是對(duì)象? Tdate:month=10; /error:month是Tda

15、te的那個(gè)對(duì)象? Tdate:Set(2, 15, 1998); /error:Set對(duì)那個(gè)對(duì)象操作? 21下面是正確的調(diào)用成員函數(shù)形式: #include #include tdate.h Tdate s; /全局對(duì)象名s void func( ) /普通函數(shù) Tdate oneday; /創(chuàng)建對(duì)象 oneday.Set(2, 15, 1998); /調(diào)用其成員函數(shù) oneday.Print(); 11.4 調(diào)用成員函數(shù)222.用指針調(diào)用成員函數(shù)對(duì)象可以用指針來(lái)引導(dǎo)。例如,下面的程序用指針引出對(duì)象的成員函數(shù)。該程序是一個(gè)多文件程序結(jié)構(gòu),工程ch11_2.prg包含有兩個(gè)源文件: / ch11

16、_2.prg ch11_2.cpp tdate.cpp在ch11_2.cpp中,只要包含類(lèi)Tdate的頭文件tdate.h,就可以使用該類(lèi)了。11.4 調(diào)用成員函數(shù)23# include # include tdate.hvoid someFunc(Tdate * pS) /普通函數(shù) pS - Print( ); /pS是s對(duì)象的指針 if ( pS-IsLeapYear( ) ) cout leap year n; else coutnot leap yearn;int main( ) Tdate s; s.Set(2, 15, 1998); someFunc( &s ); /對(duì)象的地址傳給

17、指針 運(yùn)行結(jié)果為:2/15/1998not leap years的地址作為參數(shù)調(diào)用someFunc( )11.4 調(diào)用成員函數(shù)243.用引用傳遞來(lái)訪問(wèn)成員函數(shù)把形參定義成是實(shí)參的“引用”例如,下面的程序是根據(jù)ch11_2.cpp改編的,它使用了引用傳遞,而后調(diào)用成員函數(shù)。該程序同樣是一個(gè)多文件程序結(jié)構(gòu),工程ch11_3.prg包含有: / ch11_3.prg ch11_3.cpp tdate.cpp11.4 調(diào)用成員函數(shù)25 # include # include tdate.h void someFunc(Tdate& refs) refs.Print( ); /refs是對(duì)象s的別名 i

18、f (refs.IsLeapYear() cout leap year n; else coutnot leap yearn; int main( ) Tdate s; s.Set(2, 15, 1998); someFunc( s ); /對(duì)象傳給引用 運(yùn)行結(jié)果為:2/15/1998not leap year11.4 調(diào)用成員函數(shù)264.在成員函數(shù)中訪問(wèn)成員在成員函數(shù)中訪問(wèn)本類(lèi)的成員,直接使用即可(只要本成員函數(shù)中不屏蔽掉類(lèi)的成員)。例如: # include # include tdate.h void Tdate:Set(int m, int d, int y) month=m; day

19、=d; year=y; void Tdate:Print() coutmonth/day/year 前面例子中 month=m; 等價(jià)于 this-month=m;等價(jià)于s.month=m。無(wú)論對(duì)應(yīng)那個(gè)對(duì)象調(diào)用的,成員函數(shù)從獲得的參數(shù)(顯式的和隱含的)來(lái)判斷都清楚,所以成員函數(shù)中訪問(wèn)成員無(wú)需對(duì)象名作前綴。11.4 調(diào)用成員函數(shù)28Set成員函數(shù)還可以表示成下列代碼:void Tdate:Set(int m,int d,int y) this-month=m; this-day=d; this-year=y;但是不可以表示成下列代碼:void Tdate:Set(int m,int d,int

20、y) s.month=m; /error:s沒(méi)有聲明 s.day=d; /error:s沒(méi)有聲明 s.year=y; /error:s沒(méi)有聲明11.4 調(diào)用成員函數(shù)2911.5 保護(hù)成員面向?qū)ο螅涸陬?lèi)中設(shè)置保護(hù)屏障,外界不能訪問(wèn)內(nèi)部的成員,只能通過(guò)接口訪問(wèn)內(nèi)部數(shù)據(jù)成員、或被保護(hù)的成員函數(shù)。private、protected段中的成員均是被保護(hù)的private、 protected的區(qū)別在類(lèi)的繼承機(jī)制中被體現(xiàn)3011.5 保護(hù)成員設(shè)置保護(hù)屏障的目的:對(duì)于外部函數(shù)而言,保護(hù)類(lèi)的內(nèi)部數(shù)據(jù)不被肆意侵犯。使類(lèi)對(duì)它本身內(nèi)部實(shí)現(xiàn)的維護(hù)負(fù)責(zé)。限制類(lèi)與外部世界的接口。減少類(lèi)與其他代碼的關(guān)聯(lián)程度。例如:假定一個(gè)學(xué)

21、生類(lèi)Student,它有三個(gè)功能:增加課程,返回當(dāng)前平均成績(jī),返回本學(xué)期學(xué)時(shí)數(shù)。31/student.hclass Student protected: int semesHours; /學(xué)期學(xué)時(shí)數(shù) float gpa; /平均成績(jī) public: float Grade( ) /取當(dāng)前平均成績(jī) return gpa; int Hours( ) /取學(xué)時(shí)數(shù) return semesHours; void AddCourse(int hours,float grade) /增加課時(shí)及成績(jī) gpa=semesHours*gpa+grade*hours; /總分 semesHours+=hours;

22、 /調(diào)整學(xué)期學(xué)時(shí)數(shù) gpa/=semesHours; /調(diào)整平均成績(jī) ;32#include #include student.hint main() Student s; s.gpa=3.5; /error:保護(hù)成員不能在類(lèi)外被訪問(wèn) couts.gpaendl; /error couts.Grade(); couts.Hours(); float gpa=s.Grade(); int hours=s.Hours(); /修改局部變量并不能使s對(duì)象中數(shù)據(jù)得以修改 gpa+=3; hours+=4.0; couts.gpaendl; /error couts.Hours()endl;s.AddC

23、ourse(3,4.0);couts.Grage()endl;couts.Hours()=0&newgpa=5.0) gpa=newgpa; return oldgpa; / protected: int semesHours; float gpa; ;將原值返回以防止誤操作覆蓋原值而使數(shù)據(jù)丟失34編制應(yīng)用程序,想要使用某個(gè)類(lèi),所要了解的全部?jī)?nèi)容是它的公共成員。用戶無(wú)需了解內(nèi)部的操作,只要知道“接口”即可。由于條件的改變,或者發(fā)現(xiàn)了類(lèi)中的錯(cuò)誤,則只希望改變類(lèi)的內(nèi)部代碼,而并不要求改變外部應(yīng)用,因?yàn)榻涌跊](méi)有變。由于類(lèi)很好地屏蔽了內(nèi)部數(shù)據(jù)表示,所以由類(lèi)負(fù)責(zé)的內(nèi)部實(shí)現(xiàn)上的維護(hù)不影響應(yīng)用程序的開(kāi)發(fā),這

24、大大減輕了開(kāi)發(fā)應(yīng)用程序的強(qiáng)度。 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)35例:下面的程序?qū)崿F(xiàn)了一個(gè)Point類(lèi),并使用該類(lèi)計(jì)算點(diǎn)的直角坐標(biāo)和極坐標(biāo)#include #include class Point protected: double x; /x軸分量 double y; /y軸分量 public: void Set(double ix,double iy) /設(shè)置坐標(biāo) x=ix; y=iy; 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)36 double xOffset( ) /取y軸坐標(biāo)分量 return x; double yOffset( ) /取x軸坐標(biāo)分量 return y; double angle(

25、) /取點(diǎn)的極坐標(biāo) return (180/3.14159)*atan2(y,x); double radius( ) /取點(diǎn)的極坐標(biāo)半徑 return sqrt(x*x+y*y); ; 求y/x的反正切值11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)37int main( ) Point p; double x,y; for(;) /重復(fù)輸入x和y軸分量,直到x分量值 不小于0 cout x y; if(x0) break; p.Set(x,y); cout angle= p.angle( ) ,radius= p.radius( ) ,x offset= p.xOffset( ) ,y offset= p.y

26、Offset( ) endl; 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)38將Point類(lèi)從程序中分離,成為獨(dú)立的頭文件point.h,則程序可以寫(xiě)為如下:#include #include #include point.hint main( ) Point p; double x,y; for(;) /重復(fù)輸入x和y軸分量,直到x分量值不小于0 cout x y; if(x0) break; p.Set(x,y); cout angle= p.angle( ) ,radius= p.radius( ) ,x offset= p.xOffset( ) ,y offset=p.yOffset( ) endl;

27、 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)40 /* point.h * #include class Point public: void Set(double ix,double iy) /接口 x=ix; y=iy; double xOffset( ) /接口 return x; double yOffset( ) /接口 return y; double angle( ) /接口 return (180/3.14159)*atan2(y,x); double radius( ) /接口 return sqrt(x*x+y*y); protected: double x; double y;11.6

28、屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)41類(lèi)的保護(hù)數(shù)據(jù)成員改為點(diǎn)的極坐標(biāo)形式a和r,相應(yīng)地,成員函數(shù)的實(shí)現(xiàn)也要作修改。但接口沒(méi)有變化,所以用此接口的程序不需改動(dòng),運(yùn)行結(jié)果不變。/ point.h #include class Point protected: double a; double r; public: void Set(double ix,double iy) /接口 a=atan2(iy,ix); r=sqrt(ix*ix+iy*iy); 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)42 double xOffset( ) /接口 return r*cos(a); double yOffset( ) /接口 retur

29、n r*sin(a); double angle( ) /接口 return (180/3.14159)*a; double radius( ) /接口 return r; ; 11.6 屏蔽類(lèi)的內(nèi)部實(shí)現(xiàn)4311.7 再論程序結(jié)構(gòu)1.類(lèi)的作用域類(lèi)的作用域:類(lèi)定義和相應(yīng)成員函數(shù)的定義范圍。一個(gè)類(lèi)的所有成員的作用域均在該類(lèi)的作用域內(nèi)。一個(gè)類(lèi)的成員函數(shù)對(duì)該類(lèi)的成員具有不加限制的訪問(wèn)權(quán)。對(duì)于本類(lèi)作用域外的其他成員的訪問(wèn),受“程序員”的控制(即:取決于編程)。44例: class X public: void f1(); void f2(); protected: int m; ; void X:f1(

30、) m=5; void X:f2() int m; m=2; /X:m被隱藏 類(lèi)X的數(shù)據(jù)成員m的作用域盡管在類(lèi)X中,但是,成員函數(shù)中定義了同名的局部變量后,就把數(shù)據(jù)成員m給隱藏了。11.7 再論程序結(jié)構(gòu)452.可見(jiàn)性(即可用性)由于允許類(lèi)型名與非本類(lèi)的對(duì)象同名,所以要訪問(wèn)被屏蔽的對(duì)象時(shí),可以:如果非類(lèi)型名屏蔽了類(lèi)型名,在類(lèi)型名前冠以“class”即可使用被屏蔽了的類(lèi)型名。如果類(lèi)型名屏蔽了非類(lèi)型名,則用一般作用域規(guī)則即可。 11.7 再論程序結(jié)構(gòu)46 例: class Sample /定義類(lèi) / ; void func(int Sample) /函數(shù)形參隱藏了類(lèi)名 class Sample a;

31、 /定義一個(gè)對(duì)象要用到類(lèi)名 Sample+; /形參的算術(shù)操作 / 11.7 再論程序結(jié)構(gòu)47例: int s=0; /全局變量 void func( ) class s /;/類(lèi)s隱藏了全局變量s s a; /定義一個(gè)類(lèi)對(duì)象 :s=3; /引用全局變量 /class s 作用域結(jié)束 int g=s; /用全局變量s給變量g初始化11.7 再論程序結(jié)構(gòu)48局部類(lèi):在某個(gè)函數(shù)內(nèi)定義的類(lèi)。局部類(lèi)的作用域:所屬函數(shù)塊內(nèi)。局部類(lèi)的成員函數(shù):必須在類(lèi)定義內(nèi)部定義。名空間:每個(gè)名字必須具有唯一的作用域。C+ 規(guī)定:類(lèi)型不能同名;同一作用域的對(duì)象不能同名;類(lèi)、非類(lèi)不屬于同一名空間,所以類(lèi)型名可以與其他非類(lèi)型

32、的對(duì)象同名,利用關(guān)鍵字class和作用域區(qū)分符(:)可以予以區(qū)別。11.7 再論程序結(jié)構(gòu)49例: class C /定義一個(gè)類(lèi)類(lèi)型 / ; typedef int C ; /error:又定義一個(gè)類(lèi)型取同名 Student a; /定義一個(gè)對(duì)象 void a( ); /error:函數(shù)名與對(duì)象名同名11.7 再論程序結(jié)構(gòu)50例: class stat /先定義類(lèi)類(lèi)型 / ; stat a; /定義類(lèi)對(duì)象 void stat(stat * ps); /函數(shù)名與類(lèi)名相同,它們不在同一名空間 class stat b; /必須區(qū)分stat是類(lèi)型還是函數(shù) stat(0); /非類(lèi)型名:函數(shù)調(diào)用 11.7 再論程序結(jié)構(gòu)51例: int f(int); /先定義一個(gè)非類(lèi)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論