什麼是構造函數?
什麼是構造函數?構造函數可以重載嗎?為什麼?
與類名稱具有一樣名稱的成員函數是構造函數。構造函數不能有返回值,甚至不能有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");
}
}