不存在从node到node*的适当转换函数_C++构造函数和初始化表
構造函數和初始化表
1 構造函數
當類對象被創建時,編譯系統對象分配內存空間,并自動調用該構造函數,由構造函數完成成員的初始化工作,因此構造函數的作用是初始化對象的數據成員。
2 構造函數可以重載
構造函數通過參數表的差別化可以形成重載,創建對象時通過構造函數實參的類型選擇匹配,表示不同的對象創建方式。
3 缺省構造函數 (無參構造函數)
1)如果一個類沒有定義構造函數,系統 (編譯器) 會提供一個缺省的構造函數 (無參構造函數),使成員變量獲得定義(分配內存)。
2)對于基本類型的成員變量不做初始化。
3)對類 類型的成員變量,用相應類型的無參構造函數初始化。
C/C++學習交流群點擊加入
 class A{
 public:
 A (void) { num = 0; }
 int num;
};
class B{
 public:
 A a;
 int i;
};
int main(){
 B b;
 cout << b.i << endl; //不確定值
 cout << b.a.num << endl; //0
} 
4)如果一個類定義了構造函數,無論是否有參數,系統都不會再提供缺省(無參)構造函數。
4 類型轉換構造函數(單參構造函數)
 class A{
 public:
 A(int i = 0){ //類型轉換構造函數
 num = i;
 }
 int num;
};
int main(void){
 A a;
 a = 100;//a = A(100)
}
使用 explicit 關鍵字修飾類型轉換構造函數,可以強制這種轉換必須顯示的進行,禁止隱式類型轉換。
 class A{
 public:
 explicit A(int i = 0){//類型轉換構造函數
 num = i;
 }
 int num;
};
int main(void){
 A a;
 a = 100; // error,不能在做隱式轉換
 a = A(100); // 必須顯示轉換
}
5 拷貝構造函數
1)用一個已經存在對象構造同類型的副本對象,會調用該類的拷貝構造函數。
類名 (const 類名& that) {...}
 class A{
 public:
 A(const A& that){
 num = that.num;
 }
 int num;
};
A a1;
A a2 = a1; // 等價 ==> A a2(a1),調用拷貝構造函數C/C++學習交流群:點擊加入
2)缺省拷貝構造函數
如果一個類沒有定義拷貝構造函數,那么編譯器會為其提供一個缺省的拷貝構造函數
a)對基本類型成員變量,按字節復制。
b)對類 類型的成員量,調用相應類型的拷貝構造函數
注:一般不需要自己定義拷貝構造函數,因為缺省拷貝構造已經很好用了。
3)拷貝構造函數調用的時機
a. 用已經存在對象作為同類型對象的構造實參
b. 以對象的形式向函數傳遞參數
 class A{...};
void func(A a){..};
int main(void){
 A a;
 func(a);
}
c.從函數中返回對象
 A foo(A a){
 return a;
}
4)系統提供構造函數時機
只要自己編譯構造函數,系統就不會提供默認構造函數;自己編寫拷貝函數,系統不會提供默認拷貝函數。
6 初始化表
1)指明類中成員變量初始化方式,語法格式:
class 類名{
類名 (形參表) : 成員變量 1(參數 1),成員變量 2(參數 2).. {}
};
 class A{
 /*A(int a,int b){
 m_a = a;
 m_b = b;
 }*/
 A(int a, int b):m_a(a), m_b(b){}
 A(void):m_a(0),m_b(0){}
 int m_a;
 int m_b;
};
2)必須顯示使用初始化表的地方
a. 如果有類 類型的成員變量,而該類又沒有無參構造函數,則必須通過初始化表初始化該成員變量(成員子對象)。
b. 類中包含"const"或"引用&"成員變量,必須在初始化表中顯示的初始化。
c. 成員變量初始化順序由聲明順序決定,而與初始化表的順序無關;
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的不存在从node到node*的适当转换函数_C++构造函数和初始化表的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: thinkphp用来做什么项目_用蜂蜜做
- 下一篇: python key lambda_使用
