日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对象的使用

發(fā)布時(shí)間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对象的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、對(duì)象指針

二、對(duì)象引用

三、對(duì)象數(shù)組

四、動(dòng)態(tài)對(duì)象 ?

五、this指針

六、組合對(duì)象


一、對(duì)象指針

定義:占用一塊連續(xù)的內(nèi)存區(qū)域,由此可以使用一個(gè)指向?qū)ο蟮闹羔榿碓L問對(duì)象。它指向存放該對(duì)象的地址。

優(yōu)點(diǎn):

(1)實(shí)現(xiàn)地址傳遞

(2)使用對(duì)象指針效率高

//Clock.h #include<iostream> using namespace std;class Clock { public:Clock(int h = 0,int m = 0,int s = 0){H = h;M = m;S = s;cout << "Clock()" << endl;}~Clock(){cout << "~Clock()" << endl;}void SetTime(int h,int m,int s){H = h;M = m;S = s;}void ShowTime(){cout << H << ":" << M << ":" << S <<endl;}Clock(Clock &p){H = p.H;M = p.M;S = p.S;}void AddTime(Clock *Cp){H = (Cp -> H + H + (Cp -> M + M + (Cp -> S + S ) / 60 ) / 60 ) % 24;M = (Cp -> M + M + (Cp -> S + S) / 60 ) % 60;S = (Cp ->S + S ) % 60;}void AddTime(int h,int m,int s){H = (h+ H + (m + M + ( s + S) / 60 ) / 60) % 24;M = (m + M + (s + S) / 60) % 60; S = (s + S) % 60;}void AddTime(int s){H = (H + (M + ( s + S) / 60 ) / 60) % 24;M = (M + (s + S) / 60) % 60; S = (s + S) % 60;} private:int H;int M;int S; }; //main.cpp #include<iostream> #include"Clock.h" using namespace std;int main() {Clock C1;Clock C2(8,20,20);C1.AddTime(4000);C1.ShowTime();C2.AddTime(&C1);C2.ShowTime();return 0;}

?

?

二、對(duì)象引用

對(duì)象引用就是對(duì)某類對(duì)象定義一個(gè)引用,其實(shí)只是通過將被引用對(duì)象的地址賦給引用對(duì)象,使二者指向同一塊內(nèi)存空間,引用對(duì)象是被引用對(duì)象的別名。

PS:

(1)對(duì)象引用與被引用對(duì)象必須是同類型的。

(2)除非是作為函數(shù)參數(shù)與函數(shù)返回值,對(duì)象引用在定義時(shí)必須要初始化。

(3)定義一個(gè)對(duì)象引用并沒有定義一個(gè)對(duì)象,所以不分配地址空間,不調(diào)用構(gòu)造函數(shù)。

(4)對(duì)象引用通常作為函數(shù)的參數(shù),它具有指針的優(yōu)點(diǎn),還比指針更簡潔。

void AddTime(Clock &Cr) {H = (Cr.H + H + (Cr.M + M + (Cr.S + S ) / 60 ) / 60 ) % 24;M = (Cr.M + M + (Cr.S + S) / 60 ) % 60;S = (Cr.S + S ) % 60; }

將main.cpp中C2.AddTime(&C1);替換成 C2.AddTime(C1);.

運(yùn)行結(jié)果和上圖相同。

三、對(duì)象數(shù)組

概念:對(duì)象數(shù)組是以對(duì)象為元素的數(shù)組。對(duì)象數(shù)組的定義、賦值、引用和普通數(shù)組相同。

//Score.h #include<iostream> using namespace std;const double Rate = 0.7; //平時(shí)成績比例class Score { public:Score(long = 0,char * = NULL,int = 0,int = 0, int = 0);//構(gòu)造函數(shù)void Count(); //計(jì)算總評(píng)成績void ShowScore(); //顯示成績 private: long Sno; //學(xué)號(hào)char *Sname; //姓名int Speace; //平時(shí)成績int Sfinale; //期末考試成績int Stotal; //總評(píng)成績 };//構(gòu)造函數(shù) Score :: Score(long no,char * name,int peace,int finale, int total) {Sno = no;Sname = name;Speace = peace;Sfinale = finale;Stotal = total; }void Score :: Count() {Stotal =(int) (Speace * Rate + Sfinale * (1- Rate)); } void Score :: ShowScore() {cout << Sno << "\t" << Speace << "\t" << Sfinale << "\t" << Stotal << endl; } //main.cpp #include<iostream> #include"Score.h"int main() {Score ClassScore1[3];Score ClassScore2[3] = { Score(20190101,"zhangsan",80,79),Score(20190102,"lisi",90,85),Score(20190103,"wangwu",70,55)};for(int i = 0;i < 3;i++){ClassScore2[i].Count();}for(int i = 0;i < 3;i++){ClassScore2[i].ShowScore();} }

四、動(dòng)態(tài)對(duì)象 ?

//在之前的Score.h 文件里增加這個(gè)函數(shù) //Score.h void Score :: SetScore(long no,char * name,int peace,int finale, int total) {Sno = no;Sname = name;Speace = peace;Sfinale = finale;Stotal = total; }

?

//main.cpp #include<iostream> #include"Score.h"int main() {Score * ClassScore;ClassScore = new Score[3];ClassScore[0].SetScore(20190101,"zhangsan",80,79),ClassScore[1].SetScore(20190102,"lisi",90,85),ClassScore[2].SetScore(20190103,"wangwu",70,55);for(int i = 0;i < 3;i++){ClassScore[i].Count();}for(int i = 0;i < 3;i++){ClassScore[i].ShowScore();}delete [ ] ClassScore;return 0; }

運(yùn)行結(jié)果與之前的截圖相同。

PS:在建立動(dòng)態(tài)對(duì)象數(shù)組時(shí),要調(diào)用構(gòu)造函數(shù),調(diào)用的次數(shù)與數(shù)組的大小相同,刪除的時(shí)候要調(diào)用析構(gòu)函數(shù),調(diào)用的次數(shù)與數(shù)組的大小相同。

五、this指針

概念:this指針是一個(gè)系統(tǒng)預(yù)定義的特殊指針,指向當(dāng)前對(duì)象 ,表示當(dāng)前對(duì)象的地址。

在函數(shù)SetTime()中,函數(shù)體中這三行是等效的。

void Clock :: SetTime(int h,int m,int s) {H = h; M = m; S = s;this -> H = h; this -> M = m; this -> S = s;(* this).H = h; (*this).M = m; (*this).S = s; }

PS:

(1)this指針不是調(diào)用對(duì)象的名稱,而是指向?qū)ο蟮闹羔樀拿Q。

(2)this的值不能改變,他總是指向當(dāng)前調(diào)用對(duì)象。

六、組合對(duì)象

概念:組合概念體現(xiàn)的是一種包含與被包含的關(guān)系,即在邏輯上A是B的一部分。一個(gè)類內(nèi)嵌其他類的對(duì)象作為成員,將對(duì)象嵌入到類中的這樣一種描述復(fù)雜類的方法叫做類的組合,一個(gè)含有其他類對(duì)象稱為組合類,組合類的對(duì)象稱為組合對(duì)象。

我們以計(jì)算火車旅途時(shí)間的組合類來看。

?

????????? 類名?????????????????????????????????? 成員名
???????? TrainTrip?Clock?? StartTimeH,M,S
SetTime(),ShowTime()
Clock?? EndTimeH,M,S
SetTime(),ShowTime()
char * TrianNO
char * TripTime()

?????????????????????????????????????????????????????????????????????????? 類TrainTrip的構(gòu)成與成員

//Clock.h #include<iostream> using namespace std;class Clock { public:Clock(int h = 0,int m = 0,int s = 0){this -> H = (h > 0 && h < 24) ? h : 0;this -> M = (m > 0 && m < 60 ) ? m : 0;this -> S = (s > 0 && s < 60 ) ? s : 0;}void SetTime(int h,int m,int s){this -> H = (h > 0 && h < 24) ? h : 0;this -> M = (m > 0 && m < 60 ) ? m : 0;this -> S = (s > 0 && s < 60 ) ? s : 0;}void ShowTime(){cout << H << ":" << M << ":" << S << endl;}int GetH(){return H;}int GetM(){return M;}int GetS(){return S;} private:int H;int M;int S; }; //TrainTrip.h #include<iostream> #include"Clock.h" using namespace std;class TrainTrip { public:TrainTrip(char * trainno,Clock s,Clock e)//構(gòu)造函數(shù){this -> TrainNo = trainno;this -> StartTime = s;this -> EndTime = e;}Clock TrainTime(){//臨時(shí)存儲(chǔ)小時(shí),分鐘,秒int tH; int tM;int tS;//借位int carry = 0;//臨時(shí)存儲(chǔ)時(shí)間Clock tTime;(tS = EndTime.GetS() - StartTime.GetS() ) > 0 ? carry = 0 : tS += 60,carry = 1;(tM = EndTime.GetM() - StartTime.GetM() - carry ) > 0 ? carry = 0 : tM += 60,carry = 1;(tH = EndTime.GetH() - StartTime.GetH() - carry ) > 0 ? carry = 0 : tH += 24;tTime.SetTime(tH,tM,tS);return tTime;} private:char * TrainNo; //車次Clock StartTime; //出發(fā)時(shí)間Clock EndTime; //到達(dá)時(shí)間 }; //main.cpp #include<iostream> #include"TrainTrip.h" using namespace std;int main() {Clock C1 (8,10,10);//定義Clock類的對(duì)象Clock C2(6,1,2);Clock C3;//定義Clock類對(duì)象,存儲(chǔ)結(jié)果TrainTrip T1("K16",C1,C2);//定義TrainTrip對(duì)象C3 = T1.TrainTime();C3.ShowTime();return 0; }

運(yùn)行結(jié)果:

時(shí)分秒 H,M,S是Clock類的私有成員,在Clock類外無法存取,而在TrainTrip類中需要H,M,S的值,因此在Clock類中提供了一個(gè)公有的存取H,M,S值的接口函數(shù)GetH(),GetM(),GetS()供TrainTrip類讀取H,M,S。

PS:

(1)建立對(duì)象時(shí),通過成員類的構(gòu)造函數(shù)對(duì)成員對(duì)象進(jìn)行初始化,初始化值在初始化表中提供。

(2)在定義一個(gè)組合對(duì)象時(shí):

????????? a.成員對(duì)象按照在其組合類的聲明中出現(xiàn)的次序依次調(diào)用各自的構(gòu)造函數(shù)。

????????? b.組合類對(duì)象調(diào)用組合類構(gòu)造函數(shù)。

????????? c.調(diào)用析構(gòu)函數(shù),析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)相反。

(3)組合類成員對(duì)象的訪問權(quán)限

???????????? 成員對(duì)象

組合類

publicprotectedprivate
publicpublic不可訪問不可訪問
protectedprotect不可訪問不可訪問
privateprivate不可訪問不可訪問

???????????????????????????????????????????????????????????? 各個(gè)成員對(duì)象在組合類中的訪問控制屬性

?

總結(jié)

以上是生活随笔為你收集整理的对象的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。