建構函式可以根據需要定義引數
乙個類中可以存在多個過載的建構函式
建構函式的過載遵循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 ...