




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四講:程序設(shè)計(jì)基礎(chǔ)結(jié)構(gòu)體、函數(shù)的參數(shù)傳遞結(jié)構(gòu)體由不同類(lèi)型的小盒子構(gòu)成的大盒子結(jié)構(gòu)緊湊,容易管理局部的數(shù)據(jù)相關(guān)性強(qiáng),查找方便迅速通過(guò)定義學(xué)生結(jié)構(gòu)體可將學(xué)生的學(xué)號(hào)、姓名、入學(xué)時(shí)間等與學(xué)生相關(guān)的各種不同類(lèi)型的數(shù)據(jù)集中存放在內(nèi)存的一段空間內(nèi)結(jié)構(gòu)體定義思考:這兩個(gè)結(jié)構(gòu)體有什么不同??
sizeof(struct
student)=?
sizeof(struct
student2)=?struct
student{char
name[20];int
age;};struct
student2{char
*name;int
age;};用
typedef
給結(jié)構(gòu)體起“別名”訪問(wèn)結(jié)構(gòu)體變量的成員對(duì)于定義為結(jié)構(gòu)體類(lèi)型的變量,使用圓點(diǎn)運(yùn)算符對(duì)于定義為指向結(jié)構(gòu)體的指針變量,用箭頭運(yùn)算符×指針必須先有所指!結(jié)構(gòu)體數(shù)組動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)學(xué)生成績(jī)管理系統(tǒng),學(xué)生總數(shù)隨時(shí)間而變化,不確定靜態(tài)數(shù)組,假設(shè)固定為30000:
s_STUDENT
arrStu[30000];數(shù)組屬于靜態(tài)內(nèi)存分配,一旦運(yùn)行,數(shù)組大小不能改變。學(xué)生數(shù)超過(guò)數(shù)組元素最大數(shù)的限制時(shí),程序?qū)⑹W(xué)生數(shù)遠(yuǎn)低于所設(shè)定的元素最大數(shù),將造成系統(tǒng)資源的浪費(fèi)動(dòng)態(tài)數(shù)組,根據(jù)用戶(hù)輸入的人數(shù),動(dòng)態(tài)確定數(shù)組的大小。通過(guò)指針實(shí)現(xiàn):s_STUDENT*
ptrStud=new
s_STUDENT[n];可以象使用數(shù)組那樣,通過(guò)指針存取n個(gè)學(xué)生記錄所占數(shù)據(jù)區(qū)。cin
>>
n;s_STUDENT*
ptrStud
=
new
s_STUDENT[n];cout
<<
ptrStud[0].name;ptrStud[i]等價(jià)于*(ptrStud+i)參數(shù)傳遞方式按值傳遞(pass-by-value)調(diào)用函數(shù)時(shí),根據(jù)形參類(lèi)型獲得一塊內(nèi)存,存放實(shí)參值的副本傳遞大的數(shù)據(jù)項(xiàng)時(shí),如結(jié)構(gòu)體,生成副本需要花費(fèi)大量的時(shí)間和內(nèi)存空間。按引用傳遞(pass-by-reference)將形參定義為指針類(lèi)型本質(zhì)上還是一種按值傳遞調(diào)用函數(shù)時(shí),生成一個(gè)指針類(lèi)型的盒子,并將實(shí)參的值(一個(gè)地址)放入該盒子。這個(gè)地址(實(shí)參值)么通過(guò)&運(yùn)算符獲得實(shí)參變量的地址。
printStd(
&secondStd
);要么從指針類(lèi)型的實(shí)參變量中取出,是實(shí)參變量所指向的變量地址;
printStd(
ptrSecondStd);指針作為函數(shù)的參數(shù)向函數(shù)傳遞結(jié)構(gòu)體的方法按值傳遞結(jié)構(gòu)體整體作為函數(shù)參數(shù),不提倡void
printStud(s_STUDENT
stud);按引用傳遞指針類(lèi)型的形參void
printStud(s_STUDENT
*stud);Student結(jié)構(gòu)體的例子變量的引用(C++增添)變量的引用:在函數(shù)中用做其他變量的別名xy引用參數(shù)將形參定義為對(duì)某個(gè)類(lèi)型的變量的引用,稱(chēng)為引用參數(shù)void
printStudent(struct
Student
&oneStudent);源代碼引用和引用參數(shù)按值傳遞(pass-by-value)調(diào)用函數(shù)時(shí),根據(jù)形參類(lèi)型獲得一塊內(nèi)存,存放實(shí)參值的副本傳遞大的數(shù)據(jù)項(xiàng)時(shí),如結(jié)構(gòu)體,生成副本需要花費(fèi)大量的時(shí)間和內(nèi)存空間。按引用傳遞(pass-by-reference)將形參定義為指針類(lèi)型。本質(zhì)上還是一種按值傳遞。調(diào)用函數(shù)時(shí),將一個(gè)地址(實(shí)參的值)放入指針類(lèi)型的盒子(形參)這個(gè)地址(實(shí)參值)(1)要么從指針類(lèi)型的實(shí)參變量中取出,(2)要么通過(guò)&運(yùn)算符從實(shí)參變量獲得。將形參定義為對(duì)某個(gè)類(lèi)型的變量的引用,稱(chēng)為引用參數(shù)在調(diào)用函數(shù)傳遞實(shí)參時(shí),為實(shí)參變量在被調(diào)函數(shù)中起了一個(gè)別名,即為該引用參數(shù)名返回值為指針的函數(shù)s_STUDENT
*initStdArray(int
size)帶默認(rèn)形參值的函數(shù)(C++)int
add(int
x
=
5,
int
y
=
6){return
x
+
y;}int
main(){add(10,
20);10+20add(10);10+6add();5+6}帶默認(rèn)形參值的函數(shù)有默認(rèn)值的形參必須在形參列表的最后,也即在有默認(rèn)值的形參右面,不能出現(xiàn)無(wú)默認(rèn)值的形參int
add(int
x,
int
y
=
5,int
z
=
6);
√intadd(int
x
=
1,int
y
=
5,int
z);
×intadd(int
x
=
1,
int
y,
int
z
=
6);
×不允許在同一個(gè)函數(shù)的多個(gè)聲明中對(duì)同一個(gè)參數(shù)的默認(rèn)值重復(fù)定義,即使前后定義的值相同也不行。int
add(int
x
=
5,
int
y=6);int
add(int
x/*
=
5
*/,
int
y/*
=
6
*/){//這里不能再出現(xiàn)默認(rèn)形參,但為了清晰,可通過(guò)注釋說(shuō)明默認(rèn)形參
return
x+y;}內(nèi)聯(lián)函數(shù)(C++)函數(shù)調(diào)用會(huì)降低程序的執(zhí)行效率,增加時(shí)間和空間方面的開(kāi)銷(xiāo)。對(duì)于一些功能簡(jiǎn)單、規(guī)模較小又使用頻繁的函數(shù),可以設(shè)計(jì)為內(nèi)聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)不是在程序執(zhí)行時(shí)發(fā)生控制轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用處。節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開(kāi)銷(xiāo)與C中的宏定義功能相同,但更簡(jiǎn)單易用函數(shù)的重載(C++)函數(shù)的簽名(Function
Signature)函數(shù)原型中的函數(shù)名和參數(shù)類(lèi)型部分,稱(chēng)為函數(shù)的簽名。函數(shù)的返回值類(lèi)型不屬于函數(shù)簽名函數(shù)的重載函數(shù)對(duì)應(yīng)某種功能。為了實(shí)現(xiàn)細(xì)節(jié)不同的同一類(lèi)功能,C語(yǔ)言中int
square1(
int
x
);
double
square2(
double
x
);C++允許函數(shù)同名,稱(chēng)為函數(shù)的重載(Overloading)。但是要求:要么參數(shù)個(gè)數(shù)不一樣,要么至少有一個(gè)位置的參數(shù)類(lèi)型不同。int
square(
int
x
);
double
square(
double
x
);函數(shù)的重載下面那些函數(shù)定義是可以添加的?函數(shù)的重載下面那些函數(shù)定義是可以添加的???課本中位置引用、內(nèi)聯(lián)函數(shù)、默認(rèn)形參值、函數(shù)重載等鄭版
P78—P86,譚版
P12—P25,數(shù)據(jù)的保護(hù)—const
修飾符(C++)按引用傳遞參數(shù)時(shí),在被調(diào)函數(shù)中可以對(duì)主調(diào)函數(shù)中的數(shù)據(jù)進(jìn)行修改。這種修改不會(huì)因被調(diào)函數(shù)的結(jié)束而消失。如果在被調(diào)函數(shù)中僅僅是讀取主調(diào)函數(shù)中的數(shù)據(jù),而不修改,傳地址僅僅是為了提高效率。為了防止程序員因?yàn)槭д`而寫(xiě)了修改主調(diào)函數(shù)中的數(shù)據(jù)的代碼,C++提供了一種機(jī)制,可以聲明主調(diào)函數(shù)中的數(shù)據(jù)在被調(diào)函數(shù)中是只讀的。void
printStd(const
s_STUDENT
&ptrStd);譚版:P23;鄭版:P163,
5.5.1
常對(duì)象P166,5.5.3
常引用模擬洗牌和發(fā)牌過(guò)程一副撲克有52張牌,分為4種花色(suit):黑桃(Spades),紅桃(Hearts),方塊(Diamonds),草花(Clubs)每種花色又有13張牌面(Face):A,
2,
3,
…
,
10,
Jack,
Queen,
King今后的安排第四周3月21日:面向?qū)ο蟪醪剑?月20日、3月23日--實(shí)驗(yàn)2)第五周3月26日:實(shí)驗(yàn)2習(xí)題課(3月27日、3月30日--實(shí)驗(yàn)3)第六周3月31日:類(lèi)的深入剖析-1(4月1日、4月6日–實(shí)驗(yàn)3) 布置作業(yè)4:收音機(jī)類(lèi)4月4日:清明節(jié)休息第七周4月9日:實(shí)驗(yàn)3習(xí)題課、作業(yè)4講解4月10日、4月13日–實(shí)驗(yàn)4今后的安排第八周4月16日、4月18日:類(lèi)的深入剖析-2+實(shí)驗(yàn)4習(xí)題課4月17日、4月20日:實(shí)驗(yàn)4(Date)+實(shí)驗(yàn)5第九周4月23日:期中測(cè)驗(yàn)(隨堂,開(kāi)卷)4月24日、4月27
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動(dòng)合同范本1995
- 辦公家具訂購(gòu)合同范本
- pc構(gòu)件模具合同范本
- 中學(xué)軍訓(xùn)合同范本
- 共同抵押合同范本
- 中介和工廠合同范本
- 華泰期貨合同范本
- 公司簽訂賠償合同范例
- 修假山承攬合同范本
- 中國(guó)石化合同范本
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項(xiàng)考試題庫(kù)
- 常見(jiàn)恐龍簡(jiǎn)介
- 高考成績(jī)證明模板
- 新起點(diǎn)小學(xué)英語(yǔ)一年級(jí)上冊(cè)單詞卡片(共23頁(yè))
- 蝴蝶蘭PPT課件
- 譯林版五下英語(yǔ)1-3單元電子稿
- 賓館做房記錄表
- 工業(yè)管道檢查報(bào)告
- 節(jié)后復(fù)工安全溫馨提示
- 心經(jīng)注音版(打印版)
- 四年級(jí)話說(shuō)溫州教學(xué)計(jì)劃
評(píng)論
0/150
提交評(píng)論