版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C++語言程序設(shè)計,楊國興 張東玲 彭濤,中國水利水電出版社,第4章 類與對象,4.1 類與對象4.2 構(gòu)造函數(shù)與析構(gòu)函數(shù)4.3 類的組合4.4 友元4.5 靜態(tài)成員4.6 對象數(shù)組與對象指針4.7 this指針,4.1 類與對象,4.1.1 類與對象的概念 對象(object):是現(xiàn)實世界中的客觀
2、事物。 類(class):是把具有相同屬性的事物劃分為一類,從而得出的抽象概念。 面向?qū)ο蟪绦蛟O(shè)計中的類,是具有相同屬性和服務(wù)的一組對象的集合,它為屬于該類的全部對象提供了抽象的描述。 對象是類的實例,類是同種對象的抽象。,第4章 類與對象,如:確定大小和顏色的矩形都是一個個具體的對象,而將所有矩形的共同特點抽象出來,就是一個矩形類。 這些共有的屬性包括顏色 ( color ),左
3、上角坐標 ( left, top ),長 ( length )和寬 ( width ) 等; 對這些屬性的處理包括改變矩形的顏色 ( SetColor ) 和大小 ( SetSize ) ,移動矩形到新的位置 ( Move ),繪出矩形 ( Draw ) 等。將矩形的這些屬性和方法作為一個整體,封裝在一起形成一個矩形類。,4.1 類與對象,4.1.2 類的聲明 class 類名 {
4、 private: 私有數(shù)據(jù)成員和成員函數(shù); protected: 保護數(shù)據(jù)成員和成員函數(shù); public: 公有數(shù)據(jù)成員和成員函數(shù); };,第4章 類與對象,例4.1 定義一個長方形類CRect,其數(shù)據(jù)成員包括顏色,左上角坐標,長和寬,其函數(shù)
5、成員包括改變矩形的顏色(SetColor)和大小(SetSize),移動矩形到新的位置(Move),繪出矩形(Draw)。,class CRect{private:char color[10];int left;int top;int length;int width;public:void SetColor(char *c);void SetSize(int l, int w);void Move
6、(int t,int l);void Draw();};,第4章 類與對象,例4.1 (續(xù)一),void CRect::SetColor(char *c){strcpy(color, c);}void CRect::SetSize(int l, int w){length=l;width = w;}void CRect::Move(int t,int l){top = t;left = l;}
7、void CRect::Draw(){cout << "矩形左上角坐標為(" << left << "," << top << ")" << endl;cout << "矩形長和寬分別為" << length << ","
8、; << width << endl;cout << "矩形的顏色是" << color << endl;},第4章 類與對象,域運算符(::)用于指出該函數(shù)是哪一個類的成員函數(shù),用法: 類名::函數(shù)名(參數(shù)表),例4.1 (續(xù)二),void main(){CRect r; r.SetColor("Red"
9、;);r.Move(10,20);r.SetSize(100,200);r.Draw();r.Move(50,50);r.SetColor("Blue");r.Draw();},第4章 類與對象,定義CRect類的對象,定義對象的格式: 類名 對象名1,對象名2,……,訪問對象的公有成員,格式為: 對象名.公有成員函數(shù)名(參數(shù)表) 對象名.公有數(shù)據(jù)成員
10、名,程序運行結(jié)果為:矩形左上角坐標為(20,10)矩形長和寬分別為100,200矩形的顏色是Red矩形左上角坐標為(50,50)矩形長和寬分別為100,200矩形的顏色是Blue,4.1 類與對象,4.1.3 成員的訪問控制 private: 私有訪問權(quán)限,只允許類中的成員函數(shù)訪問,其他函數(shù)不能訪問。 protected: 保護訪問權(quán)限,在第7章中介紹。 public: 公有
11、訪問權(quán)限,在任何函數(shù)中都可以訪問。 例:若主函數(shù)中有以下語句,是否正確? CRect r; strcpy( r.color , “red”); r.top = 10; r.left = 20;,第4章 類與對象,4.1 類與對象,4.1.3 成員的訪問控制(續(xù))
12、 若不指定類中的成員的訪問權(quán)限,則默認為私有成員。 類也可以由struct關(guān)鍵字聲明,strust與class的區(qū)別是:如果不指定訪問權(quán)限,前者缺省的訪問權(quán)限是公有的,而后者是私有的。用struct聲明前面的矩形類:struct CRect{void SetColor(char *c);void SetSize(int l, int w);void Move(int t,int l);voi
13、d Draw();private:char color[10];int left;int top;int length;int width;};,第4章 類與對象,4.1 類與對象,4.1.4 類的成員函數(shù) 1. 類成員函數(shù)的定義方式在類外部定義:如前面定義的長方形類的成員函數(shù) 一般格式為: 函數(shù)類型 類名::成員函數(shù)名
14、(參數(shù)說明) { 函數(shù)體 } 在類中定義:如 class CRect {…… public:void setcolor( char *c ){ strcpy( color , c ); } …… };,
15、第4章 類與對象,4.1 類與對象,4.1.4 類的成員函數(shù)(續(xù)一) 2. 內(nèi)聯(lián)成員函數(shù) 將成員函數(shù)的定義直接寫在類中即成為內(nèi)聯(lián)成員函數(shù)在類外定義時用inline指出: 如: inline void CRect::SetColor(char *c) {strcpy(color, c); },第4章 類與對象,4.1 類與對象,4.1.4 類的成員函數(shù)(續(xù)二
16、) 3. 帶默認參數(shù)值的成員函數(shù) 注意:默認參數(shù)只能在聲明或定義中的一處給出,即如在類中的函數(shù)聲明已經(jīng)給出默認參數(shù)值:void SetSize(int l=100, int w=100);則在函數(shù)定義時就不能再給出默認值。同樣如果在定義時給出了默認值: void CRect::SetSize(int l=100, int w=100) { length=l;
17、 width = w; }在聲明處就不能再給默認值了。,第4章 類與對象,4.2 構(gòu)造函數(shù)與析構(gòu)函數(shù),構(gòu)造函數(shù):對對象進行初始化。析構(gòu)函數(shù):在對象銷毀時進行內(nèi)存釋放等清理工作。 4.2.1 構(gòu)造函數(shù) 1. 構(gòu)造函數(shù)的特點 (1) 構(gòu)造函數(shù)的函數(shù)名與類名相同。 (2) 不能定義構(gòu)造函數(shù)的類型(即不能指明構(gòu)造函數(shù)返回值的類型)。 (3)
18、構(gòu)造函數(shù)應(yīng)聲明為公有函數(shù)。 (4) 構(gòu)造函數(shù)不能在程序中調(diào)用,在對象創(chuàng)建時,構(gòu)造函數(shù)被系統(tǒng)自動調(diào)用。 2. 構(gòu)造函數(shù)的作用 構(gòu)造函數(shù)的作用就是在對象被創(chuàng)建時利用特定的值構(gòu)造對象,將對象初始化為一個特定的狀態(tài),使此對象具有區(qū)別于其它對象的特征。,第4章 類與對象,例 為CRect類添加構(gòu)造函數(shù),class CRect{private:char color[10]; …
19、…public:CRect( );CRect(char *c, int t, int left, int len, int wid);void SetColor(char *c); ……}; CRect::CRect(){strcpy(color, "Black");top = 0;left = 0;length = 0;width = 0;},第4章 類與對象,例
20、 為CRect類添加構(gòu)造函數(shù)(續(xù)),CRect::CRect(char *c, int t, int lef, int len, int wid ){strcpy(color, c);top = t;left = lef;length = len;width = wid;} void main(){CRect r1; //自動調(diào)用第一個構(gòu)造函數(shù) CRect r2(“re
21、d”, 10,10,100,100); //自動調(diào)用第二個構(gòu)造函數(shù)CRect r3("green", 200,200,50,50); //自動調(diào)用第二個構(gòu)造函數(shù)r1.Draw();r2.Draw();r3.Draw();},第4章 類與對象,例4.2 構(gòu)造函數(shù)的初始化表,#include using namespace std;class A{private:const
22、double PI; int b; int &c;public:A(int x):PI(3.14),c(b){b=x;}void Output(){cout << PI << "," << b << "," << c << endl;}};,第4章 類與對象,v
23、oid main(){A x(10);x.Output();},,程序運行結(jié)果:3.14,10,10,4.2 構(gòu)造函數(shù)與析構(gòu)函數(shù),4.2.2 析構(gòu)函數(shù) 1. 析構(gòu)函數(shù)的特點 (1) 析構(gòu)函數(shù)名字為符號“~”加類名。 (2) 析構(gòu)函數(shù)沒有參數(shù),不能指定返回值類型。 (3) 一個類中只能定義一個析構(gòu)函數(shù),所以析構(gòu)函數(shù)不能重載。 (4)
24、 當一個對象作用域結(jié)束時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù)。 如CRect類的析構(gòu)函數(shù)聲明為:~CRect(); 定義為: CRect::~CRect() { …… } 2. 析構(gòu)函數(shù)的作用 在刪除一個對象前被調(diào)用,釋放該對象成員的內(nèi)存空間,以及其它一些清理工作。,
25、第4章 類與對象,例4.3 設(shè)計一個簡單的字符串類,類中有兩個數(shù)據(jù)成員,分別表示字符串的長度和字符串的內(nèi)容,有一個構(gòu)造函數(shù)和一個析構(gòu)函數(shù),函數(shù)GetLength( )返回字符串長度,函數(shù)GetContents( )獲得字符串的內(nèi)容,重載函數(shù)SetContents( )給字符串設(shè)置值。,#include #include using namespace std;class CString {private:int
26、 length;char *contents;public: CString(); //構(gòu)造函數(shù) ~CString(); //析構(gòu)函數(shù) int GetLength(); void GetContents(char *str); void SetContents(int len, char *cont); void SetContents(char *c
27、ont);};,第4章 類與對象,例4.3 (續(xù)一),CString::CString(){length = 0;contents = NULL; cout << "字符串對象初始化" << endl;} CString::~CString(){ cout << contents << "被銷毀" <<
28、; endl;if(contents != NULL)delete contents;}int CString::GetLength(){return length;}void CString::GetContents(char *str){strcpy(str, contents);},第4章 類與對象,例4.3 (續(xù)二),void CString::SetContents(int len, ch
29、ar *cont){length = len;if(contents != NULL)delete contents;contents = new char[len+1];strcpy(contents,cont);cout << "兩個參數(shù)的SetContents函數(shù)" << endl;}void CString::SetContents( char *co
30、nt){length = strlen(cont);if(contents != NULL)delete contents;contents = new char[length+1];strcpy(contents,cont);cout << "一個參數(shù)的SetContents函數(shù)" << endl;},第4章 類與對象,例4.3 (續(xù)三),void main
31、(){CString str1,str2; //兩次調(diào)用構(gòu)造函數(shù) str1.SetContents("第一個字符串"); //調(diào)用有一個參數(shù)的SetContents函數(shù) str2.SetContents(20, "第二個字符串兩個參數(shù)"); //調(diào)用有兩個參數(shù)的SetContents函數(shù) int i = str1.GetLe
32、ngth();char string[100]; str1.GetContents(string); cout << i << " "<< string << endl; i = str2.GetLength();str2.GetContents(string); cout << i << "
33、 " << string << endl;},第4章 類與對象,程序運行結(jié)果為:字符串對象初始化字符串對象初始化一個參數(shù)的SetContents函數(shù)兩個參數(shù)的SetContents函數(shù)12 第一個字符串20 第二個字符串兩個參數(shù)第二個字符串兩個參數(shù)被銷毀第一個字符串被銷毀,4.2 構(gòu)造函數(shù)與析構(gòu)函數(shù),4.2.3 拷貝構(gòu)造函數(shù) 拷貝構(gòu)造函數(shù)也是構(gòu)造函數(shù),它的作用是用
34、一個已經(jīng)存在的對象初始化新對象,拷貝構(gòu)造函數(shù)的參數(shù)為該類對象的引用。 例4.4 設(shè)計一個復數(shù)類,兩個數(shù)據(jù)成員分別表示復數(shù)的實部(real)和虛部(imag),三個構(gòu)造函數(shù)分別在不同的情況下初始化對象,函數(shù)Set()設(shè)置復數(shù)實部和虛部的值,函數(shù)Print()輸出復數(shù),函數(shù)Add()和函數(shù)Sub()分別實現(xiàn)復數(shù)的加減法運算。,第4章 類與對象,例4.4 源程序,#include "iostream“usi
35、ng namespace std;class CComplex {private:double real;double imag;public:CComplex();CComplex(double r, double i);CComplex(CComplex &c); //復數(shù)類的拷貝構(gòu)造函數(shù)聲明void Set(double r, double i);void Print();
36、CComplex Add(CComplex c);CComplex Sub(CComplex c);};,第4章 類與對象,例4.4 源程序(續(xù)一),CComplex::CComplex(){real = 0.0;imag = 0.0;}CComplex::CComplex (double r, double i){ real = r;imag = i;}CComplex::CComplex (
37、CComplex &c) //復數(shù)類的拷貝構(gòu)造函數(shù)定義{real = c.real;imag = c.imag;}// 設(shè)置復數(shù)類的實部和虛部void CComplex::Set(double r, double i){real = r;imag = i;},第4章 類與對象,例4.4 源程序(續(xù)二),// 顯示復數(shù)值void CComplex::Print(){cout <&
38、lt; "(" << real << "," << imag << ")" << endl;}// 返回兩個復數(shù)的相加結(jié)果CComplex CComplex::Add(CComplex c){CComplex temp;temp.real = real + c.real;temp.imag = im
39、ag + c.imag;return temp;}// 返回復數(shù)相減的結(jié)果CComplex CComplex::Sub(CComplex c){CComplex temp;temp.real = real - c.real;temp.imag = imag - c.imag;return temp;},第4章 類與對象,例4.4 源程序(續(xù)三),void main(void){CComplex a
40、, b(3.0,4.0), c;CComplex d(b); //調(diào)用復數(shù)類的拷貝構(gòu)造函數(shù)cout << "a = ";a.Print();cout << "b = ";b.Print();cout << "d = ";d.Print();c = b.Add(d);d = a.Sub(d);
41、cout << "c = ";c.Print();cout << "d = ";d.Print();},第4章 類與對象,程序運行結(jié)果為:a = (0, 0)b = (3, 4)d = (3, 4)c = (6, 8)d = (-3, -4),4.3 類的組合,類的組合就是在一個類中內(nèi)嵌其他類的對象作為成員,因為內(nèi)嵌對象是該類對象的組成部分,當創(chuàng)
42、建該對象時,其內(nèi)嵌對象也被自動創(chuàng)建。 在C++中是通過構(gòu)造函數(shù)的初始化表為內(nèi)嵌對象初始化的。組合類帶有初始化表的構(gòu)造函數(shù)的定義格式為: 類名::構(gòu)造函數(shù)(參數(shù)表):內(nèi)嵌對象1(參數(shù)表1),內(nèi)嵌對象2(參數(shù)表2),… { 構(gòu)造函數(shù)體 } 組合類構(gòu)造函數(shù)的執(zhí)行順序為: (1)按內(nèi)嵌對象的聲明順序依次調(diào)用內(nèi)嵌對象的構(gòu)造函數(shù)。 (2)然
43、后執(zhí)行組合類本身的構(gòu)造函數(shù)。,第4章 類與對象,例4.5 點類CPoint和線段類CLine,#include #include using namespace std;class CPoint{public:CPoint(int x=0, int y=0){X=x;Y=y; cout << " CPoint 構(gòu)造函數(shù)被調(diào)用" <<
44、 endl;};CPoint(CPoint &p);int GetX(){return X;}int GetY(){return Y;}private:int X,Y;};,第4章 類與對象,例4.5 點類CPoint和線段類CLine(續(xù)一),CPoint::CPoint(CPoint &p){X = p.X;Y = p.Y;cout <<
45、 " CPoint 拷貝構(gòu)造函數(shù)被調(diào)用" << endl;cout << "(" << X << "," << Y << ")" << endl;}class CLine{public:CLine(CPoint p1, CPoint p2);float G
46、etDistance();private:CPoint start;CPoint end;};,第4章 類與對象,例4.5 點類CPoint和線段類CLine(續(xù)二),CLine::CLine(CPoint ps, CPoint pe): start(ps), end(pe){cout << "CLine 構(gòu)造函數(shù)被調(diào)用" << endl;}float CLine::G
47、etDistance(){double x = double (end.GetX() - start.GetX() );double y = double (end.GetY() - start.GetY() );return (float) sqrt(x*x + y*y );}void main(){ CPoint p1(1,1), p2(4,5);CLine l(p1, p2);cout <
48、;< "The distance is :";cout << l.GetDistance() << endl;},第4章 類與對象,程序運行結(jié)果為:CPoint 構(gòu)造函數(shù)被調(diào)用CPoint 構(gòu)造函數(shù)被調(diào)用CPoint 拷貝構(gòu)造函數(shù)被調(diào)用(4,5)CPoint 拷貝構(gòu)造函數(shù)被調(diào)用(1,1)CPoint 拷貝構(gòu)造函數(shù)被調(diào)用(1,1)CPoint 拷貝構(gòu)造函數(shù)被調(diào)用(
49、4,5)CLine 構(gòu)造函數(shù)被調(diào)用The distance is :5,例4.5 點類CPoint和線段類CLine(續(xù)三),CLine類的對象l的構(gòu)造過程:,第4章 類與對象,4.4 友元,友元提供了在不同類的成員函數(shù)之間、類的成員函數(shù)與一般函數(shù)之間進行數(shù)據(jù)共享的機制,友元分為友元函數(shù)和友元類。 友元函數(shù):一般函數(shù)或類的成員函數(shù) 友元類:友元類的所有成員函數(shù)都自動成為友元函數(shù)4.4.1 友元
50、函數(shù) 定義友元函數(shù)時,只要在函數(shù)原型前加入關(guān)鍵字friend,并將函數(shù)原型放在類中,格式為: friend 類型標識符 友元函數(shù)名(參數(shù)列表); 友元函數(shù)可以是一個普通函數(shù),也可以是其他類的成員函數(shù),在其函數(shù)體中可以通過對象名直接訪問這個類的私有成員。,第4章 類與對象,例4.6 定義點類CPoint,寫一個函數(shù)計算兩點之間的距離。,#include #include using n
51、amespace std;class CPoint{public:CPoint(int x=0, int y=0);int GetX();int GetY();private:int X,Y;};CPoint::CPoint(int x, int y){X=x;Y=y;};int CPoint::GetX(){return X;},第4章 類與對象,int CPoint::GetY()
52、{return Y;}double GetDistance(CPoint start, CPoint end){int x1,y1,x2,y2;double d;x1 = start.GetX();y1 = start.GetY();x2 = end.GetX();y2 = end.GetY();d = sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );retu
53、rn d;}void main(){ CPoint p1(1,1), p2(4,5);double d;d = GetDistance(p1,p2);cout << "The distance is :" << d << endl;},,例4.6 (續(xù)),將函數(shù)GetDistance()聲明為CPoint類的友元。將CPoint類修改如下:
54、 class CPoint { public: CPoint(int x=0, int y=0); int GetX(); int GetY(); friend double GetDistance(CPoint start, CPoint end); private: int X,Y; }; 函數(shù)
55、GetDistance()改寫如下: double GetDistance(CPoint start, CPoint end) { double d; d = sqrt( (end.X-start.X)*(end.X-start.X) + (end.Y-start.Y)*(end.Y-start.Y) ); return d; },第4章 類與對象,4.
56、4 友元,4.4.2 友元類 如果一個類(如類A)的很多成員函數(shù)都需要經(jīng)常訪問另一個類(如類B)的私有成員,可以將類A聲明為類B的友元。 若A類為B類的友元類,則A類的所有成員函數(shù)都是B類的友元函數(shù),都可以訪問B類的私有成員。 聲明友元類的語法形式為: Class B {…… friend class A; // 聲明A為B
57、的友元類…… };,第4章 類與對象,例4.7 友元類的使用,#include using namespace std;class A{private:int x;public:void Display(){cout << x << endl;}int Getx(){return x;}friend class B;};,第4章 類與對象
58、,class B{private:A a;public:void Set(int i);void Display();};void B::Set(int i){a.x=i;}void B::Display(){cout << a.x << endl;}void main(){B b;b.Set(10);b.Display();},,程序運行結(jié)果為:10,
59、4.4 友元,4.4.2 友元類(續(xù)) 注意: 友元關(guān)系是單向的:在上面的例子中,B類是A類的友元,所以B類的成員函數(shù)可以訪問A類的私有成員,但A類不是B類的友元,A類的成員函數(shù)不能訪問B類的私有成員。 友元關(guān)系是不能傳遞的:既如果A類是B類的友元,B類是C類的友元,并不能推斷A類是C類的友元。,第4章 類與對象,4.5 靜態(tài)成員,4.5.1 靜態(tài)數(shù)據(jù)成員 靜態(tài)數(shù)據(jù)
60、成員特點:在每個類中只有一個拷貝,由該類的所有對象共同維護和使用,從而實現(xiàn)了同一類的不同對象之間的數(shù)據(jù)共享。 靜態(tài)數(shù)據(jù)成員的定義格式:在定義類的成員時前面加static static 類型標識符 靜態(tài)數(shù)據(jù)成員名; 在類的聲明中僅僅對靜態(tài)數(shù)據(jù)成員進行引用性說明,必須在文件作用域的某個地方用類名限定進行定義,這時也可以進行初始化,格式如下: 類型
61、標識符 類名::靜態(tài)數(shù)據(jù)成員名 = 初始值; 靜態(tài)數(shù)據(jù)成員不屬于任何一個對象,可以通過類名直接對它進行訪問,一般的用法是: 類名::靜態(tài)數(shù)據(jù)成員名,第4章 類與對象,例4.8 在CStudent類中添加靜態(tài)數(shù)據(jù)成員,保存CStudent類的對象總數(shù)。,#include #include using namespace std;class CStudent{private:
62、int number;char name[10];static int total;public:CStudent(int xh, char *xm);~CStudent();int GetTotal();int GetNumber();};,第4章 類與對象,CStudent::CStudent(int xh, char *xm){number = xh;strcpy(name, xm);t
63、otal++;}CStudent::~CStudent(){total--;}int CStudent::GetTotal(){return total;}int CStudent::GetNumber(){return number;},,例4.7 (續(xù)),int CStudent::total = 0;void func();void main(){CStudent s1(10001,
64、 "AAAAAA" );cout << s1.GetNumber() << endl;cout << s1.GetTotal() << endl;CStudent s2(10002, "BBBBBB" );cout << s2.GetNumber() << endl;cout << s1.Ge
65、tTotal() << endl;cout << s2.GetTotal() << endl;func();cout << s1.GetNumber() << endl;cout << s1.GetTotal() << endl;}void func(){CStudent s3(10003, "CCCCCC"
66、; );cout << s3.GetNumber() << endl;cout << s3.GetTotal() << endl;},第4章 類與對象,程序運行結(jié)果為:1000111000222100033100012,4.5 靜態(tài)成員,4.5.1 靜態(tài)數(shù)據(jù)成員(續(xù)) 例4.7中,若在主函數(shù)中使用下面的語句:
67、 cout << CStudent::total << endl; 在編譯時就會產(chǎn)生錯誤信息“不能訪問CStudent類的私有成員”,是由于total是類的私有靜態(tài)成員,類外不能直接訪問。 如果改寫成下面的語句: cout << CStudent::GetTotal() <&l
68、t; endl; 仍然有語法錯誤“GetTotal()不是靜態(tài)成員函數(shù),調(diào)用非法”。即不能用類名調(diào)用非靜態(tài)成員函數(shù)。,第4章 類與對象,4.5 靜態(tài)成員,4.5.2 靜態(tài)成員函數(shù) 靜態(tài)成員函數(shù):在成員函數(shù)聲明的前面加上關(guān)鍵字static。 靜態(tài)成員函數(shù)的特點: (1) 對于公有的靜態(tài)成員函數(shù),可以通過類名或?qū)ο竺麃碚{(diào)用,而一般的非靜態(tài)成員函數(shù)只能通過對象名來調(diào)用。靜態(tài)成員
69、函數(shù)可以由類名通過符號“::”直接調(diào)用。 (2) 靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)數(shù)據(jù)成員和靜態(tài)函數(shù)成員,不能直接問非靜態(tài)數(shù)據(jù)成員和非靜態(tài)成員函數(shù)。,第4章 類與對象,例4.9 在CStudent類中添加靜態(tài)成員函數(shù),#include #include using namespace std;class CStudent{private:int number;char name[10];stat
70、ic int total;public:CStudent(int xh, char *xm);~CStudent();static int GetTotal();int GetNumber();};,第4章 類與對象,CStudent::CStudent(int xh, char *xm){number = xh;strcpy(name, xm);total++;}CStudent::~CStude
71、nt(){total--;}int CStudent::GetTotal(){return total;}int CStudent::GetNumber(){return number;},,例4.8 (續(xù)),int CStudent::total = 0;void func();void main(){cout << CStudent::GetTotal() << en
72、dl;CStudent s1(10001, "AAAAAA" );cout << CStudent::GetTotal() << endl;CStudent s2(10002, "BBBBBB" );cout << CStudent::GetTotal() << endl;func();cout << CS
73、tudent::GetTotal() << endl;}void func(){CStudent s3(10003, "CCCCCC" );cout << s3.GetTotal() << endl;},第4章 類與對象,程序運行結(jié)果為:01232,可通過類名直接訪問靜態(tài)成員函數(shù),這樣即使未定義CStudent類的對象,也可以訪問靜態(tài)數(shù)據(jù)成員total
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《c--程序設(shè)計基礎(chǔ)教程與上機指導》第18課c、c--語言編程格式與技巧
- c++程序設(shè)計教程與實驗指導
- 《visual c#程序設(shè)計教程與上機指導》第6章windows程序設(shè)計
- c語言程序設(shè)計教程實驗指導與習題解答
- c--面向?qū)ο蟪绦蛟O(shè)計習題解答(全)
- 《java程序設(shè)計實用教學教程(第4版)習題解答與~實驗指導》第1~8章
- c--語言程序設(shè)計第二章解析
- 《visual c--.net程序設(shè)計教程與上機指導》第11章數(shù)據(jù)庫編程
- c語言程序設(shè)計實驗與習題指導課后程序設(shè)計答案
- 面向?qū)ο蟪绦蛟O(shè)計與c++
- 《visual_c--.net程序設(shè)計教程與上機指導》課件
- java面向?qū)ο蟪绦蛟O(shè)計03類與對象
- 譚浩強c語言程序設(shè)計教程學習筆記第8章
- c++面向?qū)ο蟪绦蛟O(shè)計教程第3版—陳維興,林小茶課后習題答案
- 譚浩強c語言程序設(shè)計教程學習筆記第8章
- 第1章java語言與面向?qū)ο蟮某绦蛟O(shè)計
- 上機實驗指導 c語言程序設(shè)計
- c語言程序設(shè)計實驗指導全文
- c語言程序設(shè)計與項目實踐第14章
- c語言程序設(shè)計教程 (第2版)
評論
0/150
提交評論