程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++學習筆記3——類的封裝(1),學習筆記封裝

C++學習筆記3——類的封裝(1),學習筆記封裝

編輯:C++入門知識

C++學習筆記3——類的封裝(1),學習筆記封裝


封裝:

  1、把屬性和方法進行封裝。

  2、對屬性和方法進行訪問控制。

 

訪問控制符:

  1、public:成員在整個程序內可以被訪問,public成員定義類的接口。

  2、private:成員可以被類的成員函數訪問,但不能被使用該類的代碼訪問,private部分封裝了類的實現細節。

  3、protected:成員可以被類和派生類訪問,但不能被使用該類的代碼訪問。

 

類的構造函數:

  1、構造函數的名字與類名相同。

  2、構造函數在定義時可以有參數也可以無參,但沒有任何返回類型的聲明。

  3、構造函數在變量定義時自動調用。

class Test
{
public:
    Test() = default;//類中定義了有參構造函數後系統將不會產生默認構造函數,Test() = defualt可以重新產生默認構造函數。
    Test(int num);      
};

類的析構函數:

  1、析構函數的名字與類名相同,名字頭加~。

  2、析構函數沒有參數也沒有任何返回類型的聲明。

  3、析構函數在對象銷毀時自動被調用。

class Test
{
public:
    ~Test();      
};

類的拷貝構造函數:

class Test
{
public:
    Test(const Test &obj);//一種特殊的構造函數,用一個對象出事化另一個對象,也存在深淺拷貝問題,編譯器提供的是淺拷貝
};

拷貝構造函數被調用的時機:

1. 當用類的一個對象去初始化該類的另一個對象(或引用)時系統自動調用拷貝構造函數實現拷貝賦值。

Test t1;

Test t2(t1);
Test t3 = t1;

2. 若函數的形參為類對象,調用函數時,實參賦值給形參,系統自動調用拷貝構造函數。

3. 當函數的返回值是類對象時,系統自動調用拷貝構造函數,同時返回一個匿名對象。

  匿名對象的生命周期只存在於一行,當無類變量接時,將會直接調用析構函數;當有類變量接時,會直接將匿名變量轉換成類變量。

 

類的組合:

class A
{
public:
    A(int index)
    {
        this->a = a;
    }

private:
    int a;
};

class B
{
public:
    B(int a1Init, int a2Init) :a1(a1Init), a2(a2Init), b(3)//類的初始化列表,含有其他類(帶有參構造函數)和const變量必須使用類的初始化列表進行初始化
    {
        ;
    }

private:
    A a1;
    A a2;
    const int b;
};

類的組合的調用順序:

  1、當類中有成員變量是其它類的對象時,首先調用成員變量的構造函數,調用順序與聲明順序相同,之後調用自身類的構造函數。

  2、析構函數的調用順序與對應的構造函數調用順序相反。

   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved