什麼是實例化,實例化、聲明、初始化的區別

實例化(instantiate)是指在面向對象的編程中,把用類創建對象的過程稱爲實例化。是將一個抽象的概念類,具體到該類實物的過程。實例化過程中一般由類名 對象名 = new 類名(參數1,參數2...參數n)構成。

簡介

面向對象的編程中,通常把用類創建對象的過程稱爲實例化,其格式如下:

如 Date date=new Date();就是用日期類創建了一個日期的對象,就叫對象的實例化。

多數語言中,實例化一個對象就是爲對象開闢內存空間,或者是不用聲明,直接使用new 構造函數名,建立一個臨時對象。

例: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爲例。

類不同於函數,定義完之後無法直接使用,因爲類只是一個抽象的概念,需要通過關鍵字new來實例化類,纔可以使用。類實例化的語法格式如下:變量名=new 類名([構造函數])。其中,變量名可以爲任何PHP變量的名稱,構造參數取決於類的構造函數,若無構造函數,則圓括號中爲空。 

實例化一個類後即可使用該類。

例如:

<?php
     class People{
         public $name;  
         public function introduceMySelf(){
             echo '內容',$this->name.‘內容2’;
         }
      }
      $p=new People();
 ?>

如果要在類外使用類的屬性和方法(前提是該屬性或方法是可訪問的),需要使用操作符->,語法格式如下:

  • 實例化的類變量名->屬性名;

  • 實例化的類變量名->方法名([方法參數]);

使用類的方法與調用函數一樣,在圓括號中給出函數參數(沒有參數時當然就不用寫了)。需要特別注意的是,在使用操作符->引用屬性時,屬性名是不加符號$的。 

類模板與函數模板實例化

函數模板實例化

C++爲例,C++標準除支持隱式實例化模板函數外,還支持顯式實例化。其語法格式如下: 

template 返回類型 函數名<類型實參列表>(實參類型列表);

例如,若有以下函數模板

template<typename T>
void swap(T a ,T b){
     T tempt=a;
     a=b;
     b=tempt;
};

那麼,以下語句是該函數模板的一個顯式實例化:

template void swap<int>(int,int);

說明:template關鍵字之後不再跟"<>",否則就成了函數模板的特化。

類模板的實例化

與函數模板相似,類模板只是一個虛的“圖紙”。只有在編譯期間,編譯器根據給定的模板類型實參生成實實在在的模板類,這纔是真實存在的類代碼。函數模板實例化後會生成模板函數,類模板實例化後則會生成模板類。

在爲不同模板實參類型實例化生成模板類時,編譯器會爲每種數據類型都生成一個模板代碼的副本,所以結果會導致代碼體積增大。因此,在實際調用過程中,編譯器會有選擇的實例化類模板中的成員函數,只有那些被調用了的函數,它對應的類模板成員函數纔會被編譯器實例化並生成。這就是類模板的“選擇性實例化”。 

聲明、初始化、實例化的區別

聲明是指使用一個對象的時候,先定義屬於哪個類型,比如string _str;

_str是聲明(定義)了一個string類型的對象。

初始化可以理解爲給聲明的對象賦值的過程。string _str ="hello";

_str現在已經被初始化了,實例化後它具有“hello”這個值。

實例化是類用到的,A a = new A();當new的時候爲對象分配內存,這個過程是對象的實例化。

 

總結:

聲明,只生成對象不賦值的過程

初始化,是給對象賦值的過程

實例化,是使用new爲對象分配內存的過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章