實例化是指在面向?qū)ο蟮木幊讨?,把用類?chuàng)建對象的過程稱為實例化。是將一個抽象的概念類,具體到該類實物的過程。實例化過程中一般由類名 對象名 = new 類名(參數(shù)1,參數(shù)2...參數(shù)n)構(gòu)成。
簡介在面向?qū)ο蟮木幊讨?,通常把用類?chuàng)建對象的過程稱為實例化,其格式如下:
如 Date date=new Date();就是用日期類創(chuàng)建了一個日期的對象,就叫對象的實例化。
多數(shù)語言中,實例化一個對象就是為對象開辟內(nèi)存空間,或者是不用聲明,直接使用new 構(gòu)造函數(shù)名,建立一個臨時對象。
例:Java
public class A{ public static void main(String[] args){ B b = new B();//實例化 b.print(); }}class B{ public void print(){ System.out.println("Hello,World!"); }}例: c#
namespace test{ class A { public int Sub(int a) { return a++; } } class B { public void Main(String[] args) { int p = (new A()).Sub(1); System.Console.WriteLine(p); System.Console.ReadKey(); } }}使用方法以PHP為例。
類不同于函數(shù),定義完之后無法直接使用,因為類只是一個抽象的概念,需要通過關(guān)鍵字new來實例化類,才可以使用。類實例化的語法格式如下:變量名=new 類名([構(gòu)造函數(shù)])。其中,變量名可以為任何PHP變量的名稱,構(gòu)造參數(shù)取決于類的構(gòu)造函數(shù)(將在8.2.5節(jié)中詳細(xì)講述),若無構(gòu)造函數(shù),則圓括號中為空。1
實例化一個類后即可使用該類。1
例如:
如果要在類外使用類的屬性和方法(前提是該屬性或方法是可訪問的),需要使用操作符->,語法格式如下:
實例化的類變量名->屬性名;
實例化的類變量名->方法名([方法參數(shù)]);
使用類的方法與調(diào)用函數(shù)一樣,在圓括號中給出函數(shù)參數(shù)(沒有參數(shù)時當(dāng)然就不用寫了)。需要特別注意的是,在使用操作符->引用屬性時,屬性名是不加符號$的。1
類模板與函數(shù)模板實例化函數(shù)模板實例化以C++為例,C++標(biāo)準(zhǔn)除支持隱式實例化模板函數(shù)外,還支持顯式實例化。其語法格式如下:2
template 返回類型 函數(shù)名(實參類型列表);
例如,若有以下函數(shù)模板:
templatevoid swap(T a ,T b){ T tempt=a; a=b; b=tempt;};那么,以下語句是該函數(shù)模板的一個顯式實例化:
template void swap(int,int);說明:template關(guān)鍵字之后不再跟"",否則就成了函數(shù)模板的特化。2
類模板的實例化與函數(shù)模板相似,類模板只是一個虛的“圖紙”。只有在編譯期間,編譯器根據(jù)給定的模板類型實參生成實實在在的模板類,這才是真實存在的類代碼。函數(shù)模板實例化后會生成模板函數(shù),類模板實例化后則會生成模板類。3
在為不同模板實參類型實例化生成模板類時,編譯器會為每種數(shù)據(jù)類型都生成一個模板代碼的副本,所以結(jié)果會導(dǎo)致代碼體積增大。因此,在實際調(diào)用過程中,編譯器會有選擇的實例化類模板中的成員函數(shù),只有那些被調(diào)用了的函數(shù),它對應(yīng)的類模板成員函數(shù)才會被編譯器實例化并生成。這就是類模板的“選擇性實例化”。3
本詞條內(nèi)容貢獻(xiàn)者為:
閆曉東 - 副教授 - 中央民族大學(xué)信息工程學(xué)院