版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο蟪绦蛟O(shè)計(jì)C++語(yǔ)言基礎(chǔ)
Tel:627684261/5/20231
60年代產(chǎn)生的結(jié)構(gòu)化程序設(shè)計(jì)思想為使用面向過(guò)程的方法解決復(fù)雜的問(wèn)題提供了有力的手段。其基本思路是:
自頂向下,逐步求精;程序結(jié)構(gòu)按功能劃分為若干個(gè)模塊,這些模塊形成一個(gè)樹(shù)狀結(jié)構(gòu);各模塊之間關(guān)系盡可能簡(jiǎn)單,在功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均有順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成;其模塊實(shí)現(xiàn)的具體工具是使用子程序。
第一講C與C++概述程序子程序1子程序2子程序3子程序4§1.1面向過(guò)程(結(jié)構(gòu)化)的程序設(shè)計(jì)方法1/5/20232程序按功能模塊劃分為若干基本模塊(子過(guò)程),每個(gè)子過(guò)程具有一定的功能,這些過(guò)程通過(guò)參數(shù)傳遞數(shù)據(jù)。數(shù)據(jù)和過(guò)程是分離為相對(duì)獨(dú)立的實(shí)體。如下圖:結(jié)構(gòu)化方法過(guò)程1過(guò)程2過(guò)程3數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)3數(shù)據(jù)41/5/20233
結(jié)構(gòu)化程序設(shè)計(jì)方法是面向過(guò)程程序設(shè)計(jì)的思想工具。它把數(shù)據(jù)和數(shù)據(jù)的處理過(guò)程分離,當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過(guò)程都要進(jìn)行相應(yīng)的修改。另外,一個(gè)好的軟件應(yīng)隨時(shí)響應(yīng)用戶的任何操作,而不是請(qǐng)用戶按照既定的步驟使用軟件。
面向過(guò)程的程序設(shè)計(jì)認(rèn)為,每一個(gè)程序都完成一些特定的功能。每一功能的實(shí)現(xiàn)是通過(guò)對(duì)數(shù)據(jù)進(jìn)行一系列的加工而實(shí)現(xiàn)的。因而程序設(shè)計(jì)包括組織數(shù)據(jù)---設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),以及設(shè)計(jì)對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行加工的過(guò)程---設(shè)計(jì)算法兩個(gè)部分。即:
程序=數(shù)據(jù)結(jié)構(gòu)+算法1/5/20234結(jié)構(gòu)化程序設(shè)計(jì):總體結(jié)構(gòu)——層次樹(shù)狀;局部組織——模塊化。程序——處理數(shù)據(jù)的一系列過(guò)程;數(shù)據(jù),過(guò)程分開(kāi)存儲(chǔ);
“分而治之”。缺點(diǎn):數(shù)據(jù)和任務(wù)分離,難理解、維護(hù);重用性差;1/5/20235
面向?qū)ο蟮某绦蛟O(shè)計(jì)把世界看作是由若干對(duì)象組成的,對(duì)象是運(yùn)動(dòng)的,向?qū)ο蟀l(fā)送消息,將激活對(duì)象的行為,或者說(shuō)對(duì)象行為靠消息觸發(fā)而激活,對(duì)象之間通過(guò)消息進(jìn)行聯(lián)系。
每一個(gè)對(duì)象都具有靜態(tài)成員(數(shù)據(jù))和動(dòng)態(tài)成員(操作或方法)。面向?qū)ο蠓椒◤?qiáng)調(diào)的是結(jié)構(gòu)模擬和對(duì)象化,程序是一組能相互進(jìn)行通訊的對(duì)象的集合,對(duì)象之間通過(guò)消息傳遞進(jìn)行通訊。對(duì)象將數(shù)據(jù)和操作封裝在一起,對(duì)一個(gè)對(duì)象的存取或修改僅能通過(guò)其公共的接口,其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)、數(shù)據(jù)結(jié)構(gòu)以及操作是不可見(jiàn)的。即面向?qū)ο蟮某绦蛟O(shè)計(jì)是以數(shù)據(jù)為中心的開(kāi)發(fā)方法?!?.2面向?qū)ο蟮某绦蛟O(shè)計(jì)方法1/5/20236面向?qū)ο蟮姆椒〝?shù)據(jù)方法對(duì)象1數(shù)據(jù)方法對(duì)象2數(shù)據(jù)方法對(duì)象3請(qǐng)求請(qǐng)求請(qǐng)求1/5/20237類(lèi):一種用戶自定義類(lèi)型,由數(shù)據(jù)成員,函數(shù)成員,常量成員,類(lèi)型成員組成。是對(duì)一類(lèi)具有相同屬性和方法的客觀對(duì)象的抽象。對(duì)象是類(lèi)的實(shí)例.例:將各種各樣的自行車(chē)抽象成一個(gè)自行車(chē)類(lèi),描述如下:自行車(chē)類(lèi)
屬性:
架子尺寸車(chē)輪尺寸顏色原材料
操作:
轉(zhuǎn)彎移動(dòng)修理§1.3面向?qū)ο蟮幕靖拍?/5/20238對(duì)象:就是指某個(gè)具體的事物。例如一個(gè)人、一本書(shū)、一所學(xué)校對(duì)象具有以下特性:有一個(gè)名字以區(qū)別于其他的對(duì)象;有一個(gè)狀態(tài)來(lái)描述他的某些特征;有一組操作,每一個(gè)操作決定對(duì)象的一種功能或行為;對(duì)象的操作分為兩類(lèi):一類(lèi)是自身所承受的操作,一類(lèi)是施加于其它對(duì)象的操作。有兩重含義:是內(nèi)存中含有某種數(shù)據(jù)類(lèi)型值的鄰近區(qū)域。是某種數(shù)據(jù)類(lèi)型的已命名的或未命名的變量。一個(gè)擁有構(gòu)造函數(shù)的類(lèi)型對(duì)象在構(gòu)造函數(shù)完成構(gòu)造之前不能認(rèn)為是一個(gè)對(duì)象,在析構(gòu)函數(shù)完成析構(gòu)以后也不再認(rèn)為它是一個(gè)對(duì)象。1/5/20239
例如有一個(gè)學(xué)生名叫李浩,身高1.80m,體重68kg,可以修電腦,可以教計(jì)算機(jī)課,下面我們來(lái)描述這個(gè)對(duì)象:對(duì)象名:李浩對(duì)象的狀態(tài):
性別:男身高:1.80m體重:68kg對(duì)象的功能(可做的操作):
回答身高回答體重修理電腦教計(jì)算機(jī)課均屬于自身所承受的操作屬于施加于其它對(duì)象的操作1/5/202310抽象類(lèi):至少包含一個(gè)純虛函數(shù)的類(lèi)。抽象類(lèi)不能創(chuàng)建對(duì)象,但可以創(chuàng)建指向抽象類(lèi)的指針,多態(tài)機(jī)制將根據(jù)基類(lèi)指針選擇相應(yīng)的虛函數(shù)。嵌套類(lèi):在一個(gè)類(lèi)里可以定義另一個(gè)類(lèi),被嵌入類(lèi)只在定義它的類(lèi)的作用域里有效。局部類(lèi):在函數(shù)中定義的類(lèi)。注意在函數(shù)外這個(gè)局部類(lèi)是不可知的。由于局部類(lèi)的說(shuō)明有很多限制,所以并不常見(jiàn)。基類(lèi)—父類(lèi):被繼承的類(lèi)稱(chēng)為基類(lèi),又稱(chēng)父類(lèi)、超類(lèi)或范化類(lèi)。它是一些共有特性的集合,可以有其它類(lèi)繼承它,這些類(lèi)只增加它們獨(dú)有的特性。派生類(lèi)—子類(lèi):繼承的類(lèi)稱(chēng)為派生類(lèi)。派生類(lèi)可以用來(lái)作為另一個(gè)派生類(lèi)的基類(lèi),實(shí)現(xiàn)多重繼承。一個(gè)派生類(lèi)也可以有兩個(gè)或兩個(gè)以上的基類(lèi)。定義時(shí)在類(lèi)名后加":被繼承類(lèi)名"即可。1/5/202311數(shù)據(jù)成員:指類(lèi)中存儲(chǔ)數(shù)據(jù)的變量。實(shí)例化:即建立類(lèi)的一個(gè)對(duì)象。構(gòu)造函數(shù):是一個(gè)類(lèi)的實(shí)例的初始化函數(shù),將在生成類(lèi)的實(shí)例時(shí)被自動(dòng)調(diào)用,用于完成預(yù)先的初始化工作。一個(gè)類(lèi)可以有幾個(gè)構(gòu)造函數(shù),以不同的參數(shù)來(lái)區(qū)別,即構(gòu)造函數(shù)可以被重載,以便不同的情況下產(chǎn)生不同的初始化;也可以沒(méi)有構(gòu)造函數(shù),此時(shí)系統(tǒng)將調(diào)用缺省的空構(gòu)造函數(shù)。需要注意的是構(gòu)造函數(shù)沒(méi)有返回類(lèi)型。成員初始化表:成員初始化表可用于初始化類(lèi)中的任何數(shù)據(jù)成員,放在構(gòu)造函數(shù)頭與構(gòu)造函數(shù)體之間,用":"與構(gòu)造函數(shù)頭分開(kāi),被初始化的數(shù)據(jù)成員的值出現(xiàn)在一對(duì)括弧之間,它們之間用逗號(hào)分開(kāi)。1/5/202312析構(gòu)函數(shù):是一個(gè)類(lèi)的實(shí)例的回收函數(shù),將在該實(shí)例結(jié)束使用前被自動(dòng)調(diào)用,用于完成資源的釋放。一個(gè)類(lèi)只可以有一個(gè)析構(gòu)函數(shù),當(dāng)析構(gòu)函數(shù)執(zhí)行后,該實(shí)例將不復(fù)存在。析構(gòu)函數(shù)同樣沒(méi)有返回值。虛析構(gòu)函數(shù):由virtual修飾的析構(gòu)函數(shù),當(dāng)用基類(lèi)指針釋放派生類(lèi)對(duì)象時(shí)可根據(jù)它所指向的派生類(lèi)對(duì)象釋放準(zhǔn)確的對(duì)象。繼承:面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言的特點(diǎn)之一。即一個(gè)對(duì)象獲得另一個(gè)對(duì)象的特性的過(guò)程。如將公共屬性和服務(wù)放到基類(lèi)中,而它的各派生類(lèi)除了有各自的特有屬性和服務(wù)外還可以共享基類(lèi)的公共屬性和服務(wù)。這樣的好處是容易建立體系,增強(qiáng)代碼重復(fù)性。單繼承:一個(gè)派生類(lèi)只有一個(gè)基類(lèi),成為單繼承。重繼承:一個(gè)派生類(lèi)擁有多個(gè)基類(lèi),成為多繼承。1/5/202313虛函數(shù):在基類(lèi)中說(shuō)明為virtual并在派生類(lèi)中重定義的函數(shù)。重定義將忽略基類(lèi)中的函數(shù)定義,指明了函數(shù)執(zhí)行的實(shí)際操作。當(dāng)一個(gè)基類(lèi)指針指向包含虛函數(shù)的派生對(duì)象時(shí),C++將根據(jù)指針指向的對(duì)象類(lèi)型來(lái)決定調(diào)用哪一個(gè)函數(shù),實(shí)現(xiàn)了運(yùn)行時(shí)的多態(tài)性。這里的重定義類(lèi)似于函數(shù)重載,不同的是重定義的虛函數(shù)的原型必須和基類(lèi)中指定的函數(shù)原型完全匹配。構(gòu)造函數(shù)不能是虛函數(shù),而析構(gòu)函數(shù)則可以是。純虛函數(shù):在基類(lèi)中只有聲明沒(méi)有實(shí)現(xiàn)的虛函數(shù)。形式為:
virtualtypefunname(paralist)=0。這時(shí)基函數(shù)只提供派生類(lèi)使用的接口,任何類(lèi)要使用必須給出自己的定義。多態(tài)性:給不同類(lèi)型的實(shí)體提供單一接口。虛函數(shù)通過(guò)基類(lèi)接口實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性,重載函數(shù)和模板提供了靜態(tài)多態(tài)性。友元類(lèi):被某類(lèi)明確授權(quán)可訪問(wèn)其成員的類(lèi)1/5/202314復(fù)制構(gòu)造函數(shù):以自身類(lèi)對(duì)象為參數(shù)的構(gòu)造函數(shù),如Z::Z(constZ&)用在同類(lèi)對(duì)象間進(jìn)行初始化。運(yùn)算符重載:C++中可以重載雙目(如+,×等)和單目(如++)操作符,這樣可以使用戶像使用基本數(shù)據(jù)類(lèi)型那樣對(duì)自定義類(lèi)型(類(lèi))的變量進(jìn)行操作,增強(qiáng)了程序的可讀性。當(dāng)一個(gè)運(yùn)算符被重載后,它將具有和某個(gè)類(lèi)相關(guān)的含義,同時(shí)仍將保持原有含義。靜態(tài)成員函數(shù):成員函數(shù)通過(guò)前面加static說(shuō)明為靜態(tài)的,但是靜態(tài)成員函數(shù)只能存取類(lèi)的其他靜態(tài)成員,而且沒(méi)有this指針。靜態(tài)成員函數(shù)可以用來(lái)在創(chuàng)建對(duì)象前預(yù)初始化專(zhuān)有的靜態(tài)數(shù)據(jù)。1/5/202315靜態(tài)成員變量:在成員變量之前加static關(guān)鍵字將使該變量稱(chēng)為靜態(tài)成員變量,該類(lèi)所有的對(duì)象將共享這個(gè)變量的同一拷貝。當(dāng)對(duì)象創(chuàng)建時(shí),所有靜態(tài)變量只能被初始化為0。使用靜態(tài)成員變量可以取代全局變量,因?yàn)槿肿兞渴沁`背面向?qū)ο蟮某绦蛟O(shè)計(jì)的封裝性的。私有成員:只能由自身類(lèi)訪問(wèn)的成員。保護(hù)成員:只能由自身類(lèi)及其派生類(lèi)訪問(wèn)的成員。友元:被某類(lèi)明確授權(quán)可訪問(wèn)其成員的函數(shù)和類(lèi)。友元函數(shù):在函數(shù)前加上關(guān)鍵字friend即說(shuō)明了一個(gè)友元函數(shù),友元函數(shù)可以存取類(lèi)的所有私有和保護(hù)成員。友元在重載運(yùn)算符時(shí)有時(shí)是很有用的。1/5/202316純面向?qū)ο蟮模簊malltalk、eiffel混合型面向?qū)ο蟮模篶++、objectc、loops等.§1.4面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言1/5/202317§1.5C++程序的結(jié)構(gòu)C++應(yīng)用程序的結(jié)構(gòu)簡(jiǎn)單的C++程序C++源程序的執(zhí)行1/5/202318
◆C++應(yīng)用程序的結(jié)構(gòu)老師類(lèi)學(xué)生類(lèi)張三李四王萍趙英類(lèi)何老師實(shí)例對(duì)象C++程序是一組相互通信的對(duì)象main主控對(duì)象C++應(yīng)用程序設(shè)計(jì):1.定義應(yīng)用需要的類(lèi);2.定義主控對(duì)象,完成對(duì)象間的通信;1/5/202319
◆簡(jiǎn)單的C++程序
#include<iostream.h>voidmain(){cout<<“Hello,World\n”;}一般:公用數(shù)據(jù)和函數(shù)說(shuō)明放在頭文件(.h)中;實(shí)現(xiàn)函數(shù)功能的函數(shù)體和局部數(shù)據(jù)放在源文件(.cpp)中;
程序是由一行行符號(hào)序列表達(dá)的,空格將符號(hào)序列分為六類(lèi):
關(guān)鍵字:include,int,const等說(shuō)明語(yǔ)句、數(shù)據(jù)的性質(zhì);
標(biāo)識(shí)符:cin,cout,a,b等代表運(yùn)算對(duì)象;
運(yùn)算符:<<,+,==等表示指定運(yùn)算;
常量:2.45等,不用說(shuō)明,是有類(lèi)型的操作數(shù);
串:“HelloWorld”等用雙引號(hào)括起來(lái)的字符序列;
特殊符號(hào):{,},//,#,(,)等1/5/202320
◆C++程序的執(zhí)行C++源程序C++預(yù)處理器預(yù)處理后的源程序C++編譯程序目標(biāo)程序鏈接程序可執(zhí)行程序其它目標(biāo)程序和庫(kù)1/5/202321§1.6數(shù)據(jù)和運(yùn)算標(biāo)識(shí)符基本對(duì)象和基本類(lèi)型常量導(dǎo)出類(lèi)型運(yùn)算符1/5/202322◆標(biāo)識(shí)符有一定含義的名字表示數(shù)據(jù)、類(lèi)型;一系列字母、數(shù)字、下劃線組成,首字符必須字母或下劃線;不能是關(guān)鍵字;大小寫(xiě)有區(qū)別;下列是不合法的:break,3var,afool,.name,……
"a"和'a'的差別?
◆變量和常量的區(qū)別:變量——存儲(chǔ)單元、運(yùn)行過(guò)程中可改變;常量除串外,不占存儲(chǔ)單元,也不能改變
◆基本對(duì)象和基本類(lèi)型1/5/202323
◆導(dǎo)出類(lèi)型(構(gòu)造類(lèi)型、自定義類(lèi)型)類(lèi)型的作用:確定分配空間的大小和所能進(jìn)行的操作修飾符:signed,unsigned,long,short,const
const型變量不能改變其值(一直為初值)導(dǎo)出數(shù)據(jù)類(lèi)型數(shù)組type[]指針type*結(jié)構(gòu)struct聯(lián)合union枚舉enum占用空間操作復(fù)雜性1/5/202324
charc1='a';運(yùn)算符&和*的作用?char*p=&c1;charc2=*p;
1指針
T*變量——存放T類(lèi)型對(duì)象的地址
voidmain(){inti;int*p;*p=i;//???
}錯(cuò);應(yīng)改為:*p=&i1/5/202325a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]2引用一個(gè)變量說(shuō)明為另一變量的引用,則成為對(duì)應(yīng)變量的別名。必須初始化,且初始化它的變量必須是已聲明過(guò)類(lèi)型的變量。兩者為同一存儲(chǔ)單元。
intcount=0;
int&refCount=count;refCount=1;count+=count;
3數(shù)組
T[size]:下標(biāo)0?size-1inta[2][3]:inta[][3]={{2,4,6},{8,10,12}};charname[7];name="string";//???數(shù)組名被作為常量不能賦值1/5/202326◆運(yùn)算符
ex1.a+=1;//含義?x,n=20;x=++n;//x的值?x=n++;//x的值?在關(guān)系運(yùn)算中,當(dāng)指定關(guān)系成立時(shí),關(guān)系表達(dá)式的值為1,否則為0。ex3.z=(a>b)?a:b;//含義?C:#include<stdio.h>f(char*a,floatb){printf("a:%s,b:%f\n",a,b);}main(){f("12.3",12.3);}C++:#include<iostream.h>
voidf(char*a,floatb){cout<<"a:"<<a<<","<<"b:"<<b<<endl;}
voidmain(){f("12.3",12.3);
}
4無(wú)值與函數(shù)
C++與C不同之處是聲明使用原型,以保證實(shí)參和形參類(lèi)型一致(編譯器檢查)1/5/202327
ex5.Char*pChar;pChar=newchar;char*string=newchar[25];//…
deletepChar;
delete[]string;★new和delete運(yùn)算符和C中的malloc和free函數(shù)的區(qū)別:new運(yùn)算符根據(jù)對(duì)象的類(lèi)型,自動(dòng)決定其大小,而malloc要指定分配存儲(chǔ)空間的大小;new返回指向此類(lèi)型的指針,malloc返回指向void*類(lèi)型的指針。
★每種運(yùn)算符只能用于特定的對(duì)象:i;
*i=10;//???
ex7.12.3%3//???12.3<<2//???
★::是作用域分辨符,用它可以訪問(wèn)隱藏的全局變量。(例見(jiàn)作用域)1/5/202328
◆程序的結(jié)構(gòu)整個(gè)程序.C文件1.C文件n函數(shù)1函數(shù)k函數(shù)1函數(shù)l全局變量局部變量靜態(tài)變量工程文件(.dsw,.prj):告訴編譯器程序由哪些.cpp文件裝成;連上哪些.obj文件;要連的標(biāo)準(zhǔn)庫(kù).lib1/5/202329
◆程序運(yùn)行時(shí)的內(nèi)存占用棧區(qū)(stackarea)堆區(qū)(heaparea)數(shù)據(jù)區(qū)(dataarea)代碼區(qū)(codearea)存放程序的代碼部分存放程序的全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)存放程序動(dòng)態(tài)申請(qǐng)的數(shù)據(jù)存放程序的局部數(shù)據(jù)和參數(shù)1/5/202330#include<stdio.h>intm=80;voidF1(intw){staticintn=70;intk=60;//1m++;n++;k++;w++;//2printf("F1()---m:%dn:%dk:%dw:%d\n",m,n,k,w);}voidF2(){intm=90;m++;//4F1(m);printf("F2()---m:%d\n",m);}voidmain(){intw=20;F1(w);//3printf("下面調(diào)用F2()\n");F2();}k60w20w20未用m80F1的n70main、F1、F2代碼數(shù)據(jù)區(qū)代碼區(qū)棧區(qū)堆區(qū)棧頂F1maink61w21w20未用m81F1的n71main、F1、F2代碼數(shù)據(jù)區(qū)代碼區(qū)棧區(qū)堆區(qū)棧頂F1maink61w21w20未用m81F1的n71main、F1、F2代碼數(shù)據(jù)區(qū)代碼區(qū)棧區(qū)堆區(qū)main棧頂k61m91w20未用m81F1的n71main、F1、F2代碼數(shù)據(jù)區(qū)代碼區(qū)棧區(qū)堆區(qū)main棧頂F2k61w91m91w20未用m81F1的n71main、F1、F2代碼數(shù)據(jù)區(qū)代碼區(qū)棧區(qū)堆區(qū)main棧頂F2F11/5/202331§1.7
流程控制、函數(shù)和文件
1.流程控制語(yǔ)句(順序、條件、循環(huán))
◆條件語(yǔ)句(if-else;switch)
注意:條件表達(dá)式的值為非零表示“真”;值為零則表示“假”。C++無(wú)布爾類(lèi)型;
ex1.switch(val){case1:cout<<"case1"<<endl;case2:cout<<"case2"<<endl;default:cout<<"casenotfound"<<endl;}//若val為1,輸出結(jié)果?
◆循環(huán)語(yǔ)句(while;for;do…while)
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句表達(dá)式1;While(表達(dá)式2){語(yǔ)句;表達(dá)式3;}1/5/202332C++函數(shù)作用:1、大任務(wù)化小時(shí),表示小任務(wù);2、定義方法。文件是編譯的獨(dú)立單位2.函數(shù)和文件◆作用域標(biāo)識(shí)符的作用域有:塊、函數(shù)、文件、全局
4種在塊和函數(shù)內(nèi)聲明的變量——作用域是塊和函數(shù);在函數(shù)外聲明的靜態(tài)全局變量——作用域是定義它的文件;全局名的作用域——整個(gè)程序。
x;voidf1(){intx;x=1;{intx;x=2;}x=3;}int*p=&x;
1/5/202333◆存儲(chǔ)分類(lèi)符外層作用域不能訪問(wèn)內(nèi)層作用域,利用::運(yùn)算符可訪問(wèn)當(dāng)前作用域所隱藏的全局名。但不能訪問(wèn)隱藏的局部名。作用域總是始于說(shuō)明點(diǎn)。x=11;voidf2(intz){intz;inty=x;intx=1;::x=2;y=x;}
★外部的:多個(gè)文件共享的變量,用extern通知編譯器同名同類(lèi)型變量引用同一存儲(chǔ)區(qū)。ex4.////inta=1;externinta;//聲明
intf()intf();//聲明(將名字與類(lèi)型聯(lián)系起來(lái)){voidg()//…{a=f();}}1/5/202334★靜態(tài)的:分配的存儲(chǔ)空間直到整個(gè)程序結(jié)束才收回(全局變量特性);局部于某一作用域(局部變量特性)按作用范圍可分:靜態(tài)局部變量,局限于特定函數(shù),但出作用域并不釋放。
靜態(tài)全局變量,局限于它的源文件。
ex5.#include<iostream.h>voidf();voidmain(){for(inti=0;i<=3;i++)f();//輸出結(jié)果???
}voidf(){staticinta=0;cout<<a++<<endl;}
函數(shù)也可以聲明為靜態(tài)的,局部于它所在的文件。ex6.//staticvoidf(char){}//staticvoidf(char){}
//若去掉static???★寄存器的:用CPU中寄存器提高頻繁使用量的速度。
★自動(dòng)的:函數(shù)的局部變量,出函數(shù)自動(dòng)消失,一般省去auto。1/5/202335◆函數(shù)參數(shù)傳遞ex7.#inlcude<iostream.h>voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}voidmain(){intx=10,y=20;swap(x,y);cout<<”x:”<<x<<“y:”<<y<<endl;//結(jié)果???}
ex8.#inlcude<iostream.h>#inlcude<iostream.h>voidswap(int*x,int*y)voidswap(int&x,int&y){{inttemp;inttemp;temp=*x;temp=x;*x=*y;x=y;*y=temp;y=temp;}}voidmain()voidmain()//結(jié)果???{{intx=10,y=20;intx=10,y=20;swap(&x,&y);swap(x,y);cout<<“x:”<<x<<“y:”<<y<<endl;cout<<“x:”<<x<<“y:”<<y<<endl;
}}參數(shù)傳值是參數(shù)值的拷貝,而不是參數(shù)本身。函數(shù)要改變實(shí)參變量有兩種方法:傳指針調(diào)用和引用調(diào)用。當(dāng)形參和實(shí)參結(jié)合時(shí),復(fù)制的是變量的地址。1/5/202336◆函數(shù)參數(shù)與默認(rèn)值voidf1(inta,intb=-1);調(diào)用形式:f1(1,2);f1(2);voidf2(inta,intb=-1,intc);//???
main()是編譯器預(yù)定義的函數(shù),C++有兩種形式:intmain(){/*…*/}intmain(intargc,char*argv[]){/*…*/}argv[0]~argv[argc-1]存放運(yùn)行環(huán)境參數(shù)。
ex9.#inlcude<iostream.h>intmain(intargc,char*argv[]){if(argc!=2){cout<<"youforgottypeparameter"<<endl;exit(1);}cout<<argv[1]<<endl;return0;}nameprother↙otherpr↙youforgottypeparameter編譯后執(zhí)行結(jié)果:prname↙1/5/202337◆內(nèi)聯(lián)、重載和引用
★宏和內(nèi)聯(lián)文件包含:#include<包含文件名>//包含文件內(nèi)容取代該預(yù)處理語(yǔ)句?條件編譯:#if條件
源程序部分1#else
源程序部分2#endif
在C++中常用const變量(常量)和內(nèi)聯(lián)函數(shù)來(lái)代替宏和帶參宏:例如:constintYES=1;//這種定義有類(lèi)型信息,更安全宏定義:#define字符序列1字符序列2//預(yù)編譯時(shí),用序列2替換序列1帶參宏:例如,#definepower(x)((x)*(x))使用,x=4;y=6;z=power(x+y)宏名宏體#if條件源程序部分1#elif條件
源程序部分2#else
源程序部分3#endif編譯時(shí),根據(jù)條件決定取哪部分編譯1/5/202338
inlinefac(inti){returni<2?1:n*fac(n-1);}
編譯器在所有調(diào)用這個(gè)函數(shù)的地方將其實(shí)際的代碼裝上。內(nèi)聯(lián)函數(shù)要出現(xiàn)在每一調(diào)用它的源文件中,所以一般放在頭文件中。內(nèi)聯(lián)函數(shù)調(diào)用,編譯器做類(lèi)型檢查,保證不傳入非法類(lèi)型;宏的優(yōu)點(diǎn)是傳入什么類(lèi)型,返回同一類(lèi)型。文件1文件2文件m……inlinefac(inti)fac(inti)fac(inti).h文件文件1文件2文件m……fac(inti)fac(inti)fac(inti).h文件inlinefac(inti)1/5/202339★重載函數(shù)同一作用域內(nèi)名字相同,但參數(shù)不同的函數(shù)稱(chēng)為重載函數(shù)。
C中求絕對(duì)值的函數(shù):intiabs(intI);longlabs(longl);doublefabs(doubled);C++用同一個(gè)函數(shù)名abs()實(shí)現(xiàn),用函數(shù)參數(shù)來(lái)區(qū)別到底調(diào)用哪個(gè)函數(shù)。這得益于函數(shù)原型不僅給出函數(shù)名,而且指出了參數(shù)類(lèi)型。為了保證編譯器根據(jù)參數(shù)類(lèi)型識(shí)別重載函數(shù),必須保證重載函數(shù)的參數(shù)不同。1、同名函數(shù),僅返回值類(lèi)型不同,但參數(shù)相同;2、兩同名函數(shù),僅用const或引用使參數(shù)類(lèi)型有所不同;ex
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度大型倉(cāng)儲(chǔ)物流中心智能通風(fēng)系統(tǒng)合同2篇
- 2024年度教育公司與海外院校關(guān)于國(guó)際合作與交流的合同2篇
- 2024年度原創(chuàng)音樂(lè)作品委托創(chuàng)作合同樣本3篇
- 2024年度品牌策劃推廣合同.3篇
- 2024年度廣告發(fā)布合同廣告項(xiàng)目合作意向書(shū)
- 2024年標(biāo)準(zhǔn)產(chǎn)品采購(gòu)合同模板版
- 2024年度水利圍堰設(shè)計(jì)與施工一體化服務(wù)合同2篇
- 2024版?zhèn)€人財(cái)產(chǎn)反擔(dān)保合同示范書(shū)3篇
- 2024年度有機(jī)農(nóng)業(yè)撫育承包管理合同3篇
- 2024年度合肥軟件開(kāi)發(fā)項(xiàng)目委托合同6篇
- 乳品加工工(中級(jí))理論考試復(fù)習(xí)題庫(kù)(含答案)
- 《教材循環(huán)利用》課件
- 學(xué)生思想政治工作工作證明材料
- 2023水性環(huán)氧樹(shù)脂涂層鋼筋
- 湘少版六年級(jí)英語(yǔ)上冊(cè)《Unit 12 第二課時(shí)(Part CPart D)》課堂教學(xué)課件公開(kāi)課
- 國(guó)開(kāi)《Windows網(wǎng)絡(luò)操作系統(tǒng)管理》形考任務(wù)2-配置本地帳戶與活動(dòng)目錄域服務(wù)實(shí)訓(xùn)
- 環(huán)保設(shè)施安全風(fēng)險(xiǎn)評(píng)估報(bào)告
- 配位化學(xué)-本科生版智慧樹(shù)知到課后章節(jié)答案2023年下蘭州大學(xué)
- 數(shù)字邏輯與計(jì)算機(jī)組成 習(xí)題答案 袁春風(fēng) 第3章作業(yè)批改總結(jié)
- 設(shè)備考察報(bào)告怎么寫(xiě)(共8篇)
- 涉酒案件警示教育心得體會(huì)范文(通用4篇)
評(píng)論
0/150
提交評(píng)論