C++筆記 第十八課 物件的構造(中)---狄泰學院
阿新 • • 發佈:2018-11-07
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux
第十八課 物件的構造(中)
1.建構函式
帶有引數的建構函式
建構函式可以根據需要定義引數
一個類中可以存在多個過載的建構函式
建構函式的過載遵循C++過載的規則
友情提示
物件定義和物件宣告不同
物件定義-申請物件的空間並呼叫建構函式
物件宣告-告訴編譯器存在這樣一個物件
建構函式的自動呼叫—在定義物件時
18-1 帶引數的建構函式
#include <stdio.h> class Test { public: Test() { printf("Test()\n"); } Test(int v) { printf("Test(int v), v = %d\n", v); } }; int main() { Test t; // transfer Test() Test t1(1); // transfer Test(int v) Test t2 = 2; // transfer Test(int v) int i(100); printf("i = %d\n", i); return 0; } 執行結果 Test() Test(int v), v = 1 Test(int v), v = 2 i = 100
在面向物件裡面,兩者存在差異
int i = 1; // 初始化—呼叫建構函式
int i; // i的初始值隨機
i = 1; // 賦值
建構函式的呼叫
一般情況下,建構函式在物件定義時被自動呼叫
一些特殊情況下,需要手工呼叫建構函式
如何建立一個物件陣列?
18-2 建構函式的手動呼叫
#include <stdio.h> class Test { private: int m_value; public: Test() { printf("Test()\n"); m_value = 0; } Test(int v) { printf("Test(int v), v = %d\n", v); m_value = v; } int getValue() { return m_value; } }; int main() { Test ta[3] = {Test(), Test(1), Test(2)}; for(int i=0; i<3; i++) { printf("ta[%d].getValue() = %d\n", i , ta[i].getValue()); } Test t = Test(100); printf("t.getValue() = %d\n", t.getValue()); return 0; } 執行結果 v), v = 2 ta[0].getValue() = 0 ta[1].getValue() = 1 ta[2].getValue() = 2 Test(int v), v = 100 t.getValue() = 100
2.小例項
需求:開發一個數組類解決原生陣列的安全性問題
提供函式獲取陣列長度
提供函式獲取陣列元素
提供函式設定陣列元素
IntArray== 陣列類==的實現 IntArray.cpp IntArray.h main.cpp
小結
建構函式可以根據需要定義引數
建構函式之間可以存在過載關係
建構函式遵循C++中過載函式的規則
物件定義時會觸發建構函式的呼叫
在一些情況下可以手動呼叫建構函式