物件的構造 中

2021-10-03 07:00:17 字數 2002 閱讀 9615

建構函式可以根據需要定義引數

乙個類中可以存在多個過載的建構函式

建構函式的過載遵循c++過載的規則 例子

class

test

test

(int v)};

intmain()

test t1(1)這裡其實也是定義乙個物件,這個物件的名字是t1,後面的()告訴我們的編譯器它只有乙個引數而且引數的型別為int,很明顯只有test(int v){}這個建構函式滿足規則,test t2= 1很明顯是c語言中用於初始化的方法,想用立即數1來初始化t2這個物件,對應的構造函式引數只有乙個且為int型別,很明顯是test(int v){}這個建構函式

結果:

sice@sice:~/dt$ g++ a.cpp

sice@sice:~/dt$ ./a.out

test(

)test(int v),v=1

test(int v),v=1

證明了我們的建構函式確實是可以過載,編譯器根據定義物件指定的引數呼叫對應的建構函式,記住初始化會呼叫建構函式而賦值時不會呼叫,初始化和賦值是不同的

建構函式的呼叫

一般情況下,建構函式在物件定義時被編譯器自動呼叫

一些特殊情況下,需要手工呼叫建構函式

當我們想要去申請3個不同的陣列物件而初始值不同時就要用到手工呼叫建構函式

例子:

#include

class

test

test

(int v)

intgeti()

};intmain()

;for

(int i=

0;i<

3;i++

)return0;

}

結果:

sice@sice:~/dt$ g++ a.cpp

sice@sice:~/dt$ ./a.out

test(

)test(int v),v=1

test(int v),v=2

t[0].geti()=0

t[1].geti()=1

t[2].geti(

)=2

可以看出test t = test()或者test t = test(立即數)也是一種初始化方法,編譯器根據引數的規則呼叫對應的建構函式

外番:開發乙個陣列類解決原生陣列的安全性問題

intarray.h

#ifndef _int_array_

#define _int_array_

class

intarray

;#endif

intarray.cpp

#include

"intarray.h"

intarray::

intarray

(int len)

int intarray::

length()

bool intarray::

set(

int index,

int value)

return ret;

}bool intarray::

get(

int index,

int&value)

return ret;

}void intarray::

free()

main.cpp

#include 「intarray.h」

#include

int main()

結果:

sice@sice:~/array$ ./a.out 

a[0]

= 1a[1]

= 2a[2]

= 3a[3]

= 4a[4]

= 5

js中Date物件的構造

我所遇到的情景如下 我通過serve端向瀏覽器的request傳送響應,響應中包含time欄位,由於在服務端使用int64來儲存時間相對節約記憶體和方便,然後再在客戶端進行time t 轉 date.以下記錄解決方案。js中的date物件 date物件的構造方法 new date var now n...

物件的構造

構造物件時對物件的初始化,構造物件時被jvm自動呼叫 1.方法名與類名相同 2.沒有返回值 3.定義乙個類時,系統會預設提供乙個無參的建構函式,當使用者自定義了有參的建構函式時,無參的建構函式會被覆蓋 例如 public myclass 形參 new 建構函式時 1.根據建構函式找到建構函式所屬的類...

物件的構造

include using namespace std 物件的構造 誰的成員誰負責初始化 手動呼叫相應的建構函式 在物件初始化列表中 class parent parent int a,int b protected int m a int m b class test private int m ...