建構函式是類的一種特殊的函式:
(1)函式名與類名相同
(2)沒有返回值
(3)可以有形參也可以沒有
(4)可以時內聯函式
(5)可以過載
(6)可以帶預設引數
作用:在物件被建立時使用特殊的值構造物件,將物件初始化為乙個特殊的狀態。
建構函式一般不顯示呼叫,在建立乙個物件時,建構函式被自動呼叫。(用編譯器完成)
若程式中未定義建構函式,編譯器將自動生成乙個預設建構函式,模擬人生建構函式的引數列表是空的。
如果程式中已經定義建構函式,預設情況下編譯器就不再隱含生成預設構造器了,如果此時依然希望編譯器生成預設構造器,可以使用「=default」
例如:class object //自定義構造器
};
#include using namespace std;
class object
object(int a)
};int main()
例如:
#include using namespace std;
class object
object(int a) :i(a)
void showinfo()
private:
int i=1;
};int main()
#include using namespace std;
class object
object(int a);
void showinfo()
private:
int i=1;
};object::object(int a) :i(a)
int main()
使用類的其他建構函式來執行初始化過程
例如:class clock
clock():clock(0,0){} //委託建構函式:使用類的其他建構函式來執行初始化過程
private:
int i, j;
};複製建構函式是乙個特殊的建構函式,其形參為本類的物件引用
作用是用乙個已經存在的物件來構造另外乙個新物件(兩個物件的型別相同)
形式:
class 類名
類名::類(const 類名 &物件名) //複製建構函式的實現
複製建構函式不顯示呼叫,而是由編譯器隱式地去呼叫
以下三種情況:
(1)定義物件
object a;
object b(a); //相當於 object b=a;
(2)動態建立物件
object a;
object* p=new object(a);
(3)函式的傳值呼叫
void test(object obj)
物件被銷毀的時候自動呼叫
(1)名稱固定:類名前面加上波浪線「~」 形式:~類名 例如:~object()
(2)沒有返回值
(3)不能帶引數
析構函式只能有乙個,不允許過載 。析構函式不顯示地呼叫而是在物件被銷毀時,被編譯器自動地呼叫。如果程式中未定義析構函式,編譯器會自動地生成乙個析構函式
子類物件構建時,先呼叫父類建構函式,再呼叫子類建構函式
子類物件析構時,先呼叫子類析構函式,再呼叫父類建構函式
即構造和析構是一對相反的過程
#include using namespace std;
class parent
parent(int a)
~parent()
};class child : public parent
child(int a)
~child()
};int main()
//結束,物件的析構函式被呼叫
}
輸出結果:
當父類有多個建構函式時可以顯式地呼叫其中乙個建構函式(使用初始化列表來呼叫),如果沒有顯示呼叫則呼叫預設的父類建構函式
下面例子中表示如何顯式地呼叫父類的建構函式:
class parent
parent(int a)
~parent()
};class child : public parent
child(int a)
~child()
};
C 小白 物件導向1
在c 中,類 class 是對c中的結構體struct的增強,也是用於自定義型別的。includeusing namespace std class object int main 訪問修飾符 public 公開的,可以被外部訪問 private 私有的,不可以被外部與訪問 protected 一般...
C 小白 物件導向2
include using namespace std class object int main 輸出結果為 include using namespace std int x 1 定義全域性變數x class object int main 3.當全域性函式與成員函式相同時,使用成員函式 inc...
python小白 物件導向 成員介紹
方法property等 字段分為兩種 普通字段和靜態字段 普通字段,又叫例項屬性,在物件導向中屬於物件,在物件被建立時產生。也就是說,普通字段只能通過物件來訪問,不可通過類訪問 如下 class ziduan 普通字段 例項屬性 def init self 通過物件建立普通字段 self.commo...