生存空间和生命周期以及多载化函式_第1页
生存空间和生命周期以及多载化函式_第2页
生存空间和生命周期以及多载化函式_第3页
生存空间和生命周期以及多载化函式_第4页
生存空间和生命周期以及多载化函式_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2022/3/26生存空間和生命週期以及多載化函式1生存空間和生命週期以及多載化函式2何謂object的scope(生存空間)n程式那些部份可以使用變數 ?main()int x=0; a();x+; int y=0;x+; / ok; y+; / errorx=x+2;a( )x+; /error 變數 y 已經被自動釋放自動釋放記憶體沒有宣告變數,怎麼能使用?3ScopenScope定義了,object的生命週期nC+ 有三種scope local scope ,global scope, namespace scope.nobject的生命週期nlocal: 只能在程式的部分期間部分期間

2、維持生命.nglobal: 能夠維持生命到整個程式結束為止.n動態配置: 其生命由程式員控制.n如: int *x=new int100; delete x;4Local Scope(區域性生存空間)n所謂local scope:n位於一個函式區塊 之內. n所以每個函式都有自己的local scopevoid Myfunction( ) int x=0; /宣告變數x,開始 scopex+; /結束 x 的scope5Local Scope(區域性生存空間)n程式區塊,如,會產生一個local scope.void Myfunction( ) int aX=1; int aX=5;int b

3、Y=2;bY+;/ ok; = bY=3aX+;/ ok; = aX=2 bY+;/ error aX+; aX的ScopebY的Scope6Local Scope(區域性生存空間)n同一個scope 中n不能有兩個相同名字的物件void Myfunction( ) int aX=1; int Y=2; int Y=5; bY+;/ error Error7Local Scope範例int Myfunction()/ 函式區塊 scope 開始int a; / scope包含 binarySearch,while,if.while() / while 區塊開始int b; / 區塊內都能使用

4、變數bif() / if 區塊開始int c; /if內也可以宣告變數,其scope 只包含if. / if 區塊結束 / while 區塊開始結束/函式區塊 結束8全域物件(Global Objects) & 全域函式(Global Functions)nglobal: 能夠維持生命到整個程式結束為止.n宣告 in global scope,則n函式的宣告式 ex: void MyFun();n變數 = 全域物件. n生命週期 :直到程式結束.nGlobal 區在那呢? (next page)910Global object 範例int y; / y 自動initial =0; 宣告y為 G

5、lobal objectvoid main(int argc, char* argv) y+; / y=1B(); void B()y+;/ y 為global scope, ok = y=2範例程式: GobalObjectDemo.cpp注意: y 並沒有設定初值11把程式寫在多個檔案中nVC操作:n建立你的專案nA) 加入新新的cpp檔進來Project - Add To Project : C+ Source File 填好filenamenB) 加入舊舊的cpp 檔:Project - Add To Project : Files 選擇要加入的檔案nCode writing Muti

6、Files:1. 把Matrix.cpp加進來2. Matrix.h的說明練習:12問題?n全域物件和non-inline全域函式在程式中都只能定義一次.n使用共同變數時怎麼辦?frist.cppint data;Greeting.cppdata+;如何使用 dataextern int data;13extern宣告式n讓多個.cpp檔案組成的程式能使用同一個object.n語法: extern 物件名稱;n使用extern並不會再額外配置記憶體.n可放置於表頭檔中.14extern 範例Greeting.cppfrist.cppint data; / 宣告global varextern

7、int data; 告訴Compiler 變數 a 在其他地方宣告範例程式: *ExternDemo.cpp15Local Objects(區域性物件)nAutomatic Objectsn自動配置與釋放記憶體的物件. 如: int x;nRegister Automatic Objectsn利用 register ,指定變數要放在暫存器中. nStatic Local Objectsn靜態的區域性物件n自動配置記憶體, 但直到程式結束才釋放記憶體.n如: static int x;n此三類皆位於Local Scope.16Automatic Objects -1n生命週期=宣告之後一直到sc

8、ope結束.n例如:void main()int a;int b;b的生命週期a的生命週期17Automatic Objects -2n承上頁,所以 “ ”可以看做內含釋放所有非由 new 關鍵字建立的object的記憶體的程式碼.n危險:int* trouble()int res;.return &res; /危險的,因為res的記憶體已經被釋放了.18Register Automatic Objectsn用途:n對於使用量極重的變數n舉例:for( register int i=0;i 整個程式期間nobject可見度 = 受限於local scope.n初值初始化 = 僅做第一次.voi

9、d IncStatic()static int s=1;s+;couts int ; float - double ; bool - intn3 精確度遺失轉換 (標準轉換) n整數轉換: int - 其他整數type (精確度遺失)n浮點間轉換: 浮點-其他浮點 (不含 float-double) (精確度遺失)n浮點-整數轉換: 浮點int (精確度遺失)n指標轉換 : any pointer type - void* pointern任意type - bool37標準轉換 (Standard Conversion)extern void print( void * ) ;extern void print( double);int main()int I;print(I);/ match 到print(double)函式/ I 被轉換到double (standard conversion)print(&I);/ match 到 print( void *)函式/ I 由 int * 指標type - void * type38作業:n設計如下之求兩個整數a, b的最小value,三個整數a,b,c的最小值,元素個數為n 的整數陣列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论