什麼是構造函數?

General 更新 2024-11-21

什麼是構造函數?構造函數可以重載嗎?為什麼?

與類名稱具有一樣名稱的成員函數是構造函數。構造函數不能有返回值,甚至不能有return語句。說明一個有返回值的構造函數是錯誤的,取構造函數的地址也是錯誤的。

如果一個類有構造函數,在程序中每個該類類型的對象在使用之前由此構造函數進行初始化(有關初始化的更多信息參見本章後面的“用特殊成員函數進行初始化”)。

構造函數是在對象的創建點上被調用的。創建對象可以是:

* 全局對象(文件範圍或外部鏈接的)。

* 在一個函數或者小的封閉塊中的局部變量。

* 用new運算符創建的動態對象。new操作在程序的堆或自由存儲區中分配一個對象。

* 因顯式調用構造函數而創建的臨時對象(詳見本章後面的“臨時對象”)。

* 因編譯器隱含調用構造函數而創建的臨時對象(詳見本章後面的“臨時對象”)。

* 其它類的數據成員。在創建類類型的對象時,若此類類型由其它類類型變量組成,將會引起該類中每個對象的創建。

* 一個類的基類子對象。創建派生類類型的對象時會引起基類構件的創建。

構造函數的作用

一個構造函數執行各種任務,但對於程序員來說,這些任務是不可見的,你甚至可以不必為構造函數寫任何代碼。這些任務都同建立一個完全的、正確的類類型對象實例有關。

在MS C++中(同樣也在很多其它C++中)一個構造函數:

* 初始化對象的虛擬基指針(vbptr)。如果該類是由虛擬基類派生出的,則這一步要執行。

* 按說明的順序調用基類和成員的構造函數。

* 初始化對象的虛擬函數指針(vfptr)。如果該類有或者繼承了虛擬函數,則這一步要執行,虛擬函數指針指向類的虛擬函數表(v-table),並且使虛擬函數的調用同代碼正確綁定(binding)。

* 在構造函數體中執行可選的代碼。

當構造函數結束以後,所分配的存儲器就是一個給定類類型的對象。因為構造函數執行這些步驟,故虛擬函數的“遲後綁定”形態可以在虛擬函數的調用點得以解決,構造函數也要構造基類以及構造組合對象(作為數據成員的對象),遲後綁定是C++實現對象的多態行為的機制。

說明構造函數的規則

構造函數具有同類名相同的名稱。只要遵守重載函數的規則(有關詳情參見第12章“重載”),可以說明多個構造函數。

語法

類名稱(參量說明表opt) cv-修飾符表opt

C++定義了兩種類型的構造函數,缺省的和拷貝的構造函數。如表11.2所述。

表11.2 缺省的和拷貝構造函數

構造函數的種類 參量 目的

缺省構造函數 可以無參量調用 構造一個類類型的缺省對象

拷貝構造函數 可以接受對同種類類型的引用作為唯一參量 拷貝類類型的對象

缺省構造函數不要參量即可調用,但你可以說明一個帶有參量表的缺省構造函數,只要讓所有的參量有缺省值即可。同樣,拷貝構造函數必須接受同一類類型的引用作為唯一參量。但可以提供更多的參量,只要後續的參量具有缺省值即可。

如果你不提供任何構造函數,編譯器會試圖生成一個缺省的構造函數。同樣,如果你沒有提供拷貝構造函數,編譯器也會試圖產生一個。編譯器產生的構造函數視為公有的成員函數。如果你說明一個拷貝構造函數,而其第一個參量是一個對象而不是一個引用,則會產生錯誤。

編譯器生成的缺省構造函數建立對象(初始化vftables和vbtables,如前面所述),並調用基類及成員的缺省構造函數,但不會採取其它的行動。基類和成員的構造函數只要存在,是可訪問的,並且是無二義性的就會被調用。

編譯器生成的拷貝構造函數建立一個對象,並且採用一個成員方式的拷貝來複制要被拷貝的對象的內容。如果基類或成員的......

什麼是構造函數

簡單地說構造函數是類函數,函數名與類名完全相同,無返回值

構造函數屬於類的成員函數,除了具有一般成員函數的特點外,還具有自己的特點:

(1)是類的一個特殊的成員函數,函數名與類名相同;(2)訪問屬性應該是public;

(3)功能是初始化對象,在構造函數中一般不作初始化以外的事情;

(4)可以在類內定義,也可在類外定義;

(5)無函數返回類型,注意:什麼也不寫,也不可寫為void;

(6)程序運行時,當對象被創建後,該對象所屬的類的構造函數自動被調用,在該對象生存期中也只調用這一次;

(7)可以重載

c++什麼叫構造函數,它的作用是什麼

構造函數的名字和類的名字一樣,並且沒有返回值類型。通常用於初始化私有的數據成員。

java中構造函數和構造方法的區別

java裡函數和方法是一個東東...

所以構造函數和構造方法是同一個東東的兩個不同的名字而已...

什麼是.net構造函數

class Book{

int i=0;

void book(_i){"這個函數是構造函數."};

}

而book bk=new book();中的bk不是函數,是個對象.

PHP 什麼是構造函數

魔術方法之一,在某種特定條件下會自動觸發的方法,也可以叫函數,

構造函數,在類被實例化成對象時,會自動調用的函數(方法),不需要你手動調用。

一般做對象的初始化,數據的初始化,基於同一個類的每個對象都有相同的屬性跟方法,

但是到具體的值是不一樣的,例如: 人都有名字,但是名字會不一樣,所以需要做初始化。

name=$name; } public function getName(){ return $this->name; }} $p1=new Person('天'); echo $p1->getName();

在Java中構造函數是什麼?

java構造函數,也叫構造方法,java類中的一種特殊方法,方法名與類名相同,一般用來初始化一些成員變量

當要生成一個類的對象(實例)的時候就會調用類的構造函數

如果不顯示聲明類的構造方法,java會自動生成一個默認的不帶參數的空的構造函數

public class Test

{

public Test(){}//這裡可以省略

public static void main(String[] args)

{

Test test = new Test();

}

}

如果顯示聲明瞭類的構造函數,java就不會再生成默認的構造函數

public class Test

{

String name;

public Test(String name)//用戶自定義構造函數

{

this.name = name;

}

public static void main(String[] args)

{

Test test = new Test("zhangsan");

}

}

什麼是構造函數?

對的,構造函數時類內的一種特殊函數,用於類中元素的初始化,用戶未定義構造函數,系統會自動配置一個空德爾構造函數,生成對象時自動調用構造函數。

在c++類中,定義構造函數的目的是什麼

構造函數通常用於在實例化對象時自動對內部數據成員初始化,設置初始值、分配內存空間等。

而析構函數則用於刪除對象時做收尾工作,比如釋放申請的空間等。

要創建一個對象,就得調用構造函數。

要銷燬一個對象,就會被迫的調用析構函數。如果成員函數聲明稱static,不創建對象也能調用 靜態成員函數。

JAVA中構造函數是什麼意思

java構造函數,也叫構造方法,java類中的一種特殊方法,方法名與類名相同,一般用來初始化一些成員變量

當要生成一個類的對象(實例)的時候就會調用類的構造函數

如果不顯示聲明類的構造方法,java會自動生成一個默認的不帶參數的空的構造函數

public class Test

{

public Test(){}//這裡可以省略

public static void main(String[] args)

{

Test test = new Test();

}

}

如果顯示聲明瞭類的構造函數,java就不會再生成默認的構造函數

public class Test

{

String name;

public Test(String name)//用戶自定義構造函數

{

this.name = name;

}

public static void main(String[]丁args)

{

Test test = new Test("zhangsan");

}

}

相關問題答案
什麼是構造函數?
什麼叫構造函數?
什麼是傳遞函數?
什麼是分佈函數?
什麼是一次函數性質?
什麼是回調函數?
什麼是單調函數?
大學什麼是單值函數?
什麼是狀態函數?
什麼是一次函數圖像?