構造函式

構造函式

構造函式,是一種特殊的方法。主要用來在創建對象時初始化對象,即為對象成員變數賦初始值,總與new運算符一起使用在創建對象的語句中。特別的一個類可以有多個構造函式,可根據其參數個數的不同或參數類型的不同來區分它們即構造函式的重載。

基本信息

簡介

構造函式構造函式
構造函式是一種特殊的方法主要用來在創建對象時初始化對象即為對象成員變數賦初始值總與new運算符一起使用在創建對象的語句中特別的一個類可以有多個構造函式可根據其參數個數的不同或參數類型的不同來區分它們即構造函式的重載

構造函式與其他方法的區別

1.構造函式的命名必須和類名完全相同;而一般方法則不能和類名相同.
2.構造函式的功能主要用於在類的對象創建時定義初始化的狀態.它沒有返回值,也不能用void來修飾.這就保證了它不僅什麼也不用自動返回,而且根本不能有任何選擇.而其他方法都有返回值.即使是void返回值,儘管方法體本身不會自動返回什麼,但仍然可以讓它返回一些東西,而這些東西可能是不安全的.
3.構造函式不能被直接調用,必須通過new運算符在創建對象時才會自動調用,一般方法在程式執行到它的時候被調用.
4.當定義一個類的時候,通常情況下都會顯示該類的構造函式,並在函式中指定初始化的工作也可省略,不過Java編譯器會提供一個默認的構造函式.此默認構造函式是不帶參數的.而一般方法不存在這一特點
5當一個類只定義了私有的構造函式,將無法通過new關鍵字來創建其對象,當一個類沒有定義任何構造函式,C#編譯器會為其自動生成一個默認的無參的構造函式。

C++中的構造函式

C++的構造函式定義格式為:構造函式
class<類名>
public:
<類名>(參數表)
//...(還可以聲明其它成員函式)
<類名>::<類名>(參數表)
//函式體
如以下定義是合法的:
class T
public:
T(int a=0){i=a;}//構造函式允許直接寫在類定義內,也允許有參數表。
private:int i;
當程式中沒有析構函式時,系統會自動生成以下構造函式:
<類名>::<類名>(){},即不執行任何操作。

C++例子

//注意若將本代碼直接複製進編譯器,可能會報錯,原因是網頁生成時會在代碼前加一個中文占位符
//最好將代碼再寫一次
#include
using namespace std;
class time
public:
time() //constructor.構造函式
hour=0;
minute=0;
sec=0;
void set_time();
void show_time();
private:
int hour;
int minute;
int sec;
int main();
class time t1;
t1.show_time();
t1.set_time();
t1.show_time();
return 0;
void time::set_time()
cin >>hour;
cin >>minute;
cin >>sec;
void time::show_time()
{ cout<}
程式運行情況:
0:0:0
10 11 11 回車
10:11:11
任何時候,只要創建類或結構,就會調用它的構造函式。類或結構可能有多個接受不同參數的構造函式。構造函式使得程式設計師可設定默認值、限制實例化以及編寫靈活且便於閱讀的代碼。
JAVA示例代碼:
public class UserManagerImpl implements UserManager
private UserDao userDao;
public UserManagerImpl(UserDao userDao)
this.userDao=userDao;
public void save(String username,String password)
this.userDao.save(username, password);
PHP中的構造函式
構造函式的聲明與其它操作的聲明一樣,只是其名稱必須是兩個下劃線__construct( )。這是PHP5中的變化;PHP4的版本中,構造函式的名稱必須與類名相同。為了向下兼容,如果一個類中沒有名為__construct( )的方法,PHP將搜尋一個與類名相同的方法。
格式:function __construct ( [參數] ) { ... ... }
例子:
class person{
public $name;
public $age;
function _ _construct(){ // 構造函式
$this->name="lisi";
$this->age=28;
function say()
echo "my name is ".$this->name."
echo "my age is ".$this->age."

$per=new person();
$per->say();
$per->name="zhangsan";
$per->age=26;
$per->say();
C#例子
構造函式是在創建給定類型的對象時執行的類方法。構造函式具有與類相同的名稱,它通常初始化新對象的數據成員。
在下面的示例中,使用一個簡單的構造函式定義了名為 Taxi 的類。然後使用 new 運算符來實例化該類。在為新對象分配記憶體之後,new 運算符立即調用 Taxi 構造函式。
public class Taxi{ public bool isInitialized; public Taxi() { isInitialized = true; }}class TestTaxi{ static void Main() { Taxi t = new Taxi(); System.Console.WriteLine(t.isInitialized); }}

PHP 構造

構造函式
void__construct([mixedargs[,...]])
php5允行開發者在一個類中定義一個方法作為構造函式。具有構造函式的類會在每次創建對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。
注:如果子類中定義了構造函式則不會暗中調用其父類的構造函式。要執行父類的構造函式,需要在子類的構造函式中調用parent::__construct()。
例子19-6.使用新標準的構造函式
<?php
classBaseClass
function__construct()
print"InBaseClassconstructor
classSubClassextendsBaseClass
function__construct()

parent::__construct();
print"InSubClassconstructor/n";
$obj=newBaseClass();
$obj=newSubClass();
?>為了實現向後兼容性,如果php5在類中找不到__construct()函式,它就會嘗試尋找舊式的構造函式,也就是和類同名的函式。因此唯一會產生兼容性問題的情況是:類中已有一個名為__construct()的方法,但它卻又不是構造函式。
析構函式
void__destruct(void)
php5引入了析構函式的概念,這類似於其它面向對象的語言,如C++。析構函式會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
例子19-7.析構函式示例
<?php
classMyDestructableClass
function__construct()
print"Inconstructor/n";

$this->name="MyDestructableClass";
function__destruct()
print"Destroying".$this->name."/n";
$obj=newMyDestructableClass();
?>和構造函式一樣,父類的析構函式不會被引擎暗中調用。要執行父類的析構函式,必須在子類的析構函式體中顯式調用parent::__destruct()。
注:析構函式在腳本關閉時調用,此時所有的頭信息已經發出。
注:試圖在析構函式中拋出一個異常會導致致命錯誤

相關搜尋

熱門詞條

聯絡我們