C++廚房1_物件x類別_小番茄套件介紹

類別(Class) : 顧名思義

用來 整合「資料/data」和「程式(序)/procedur」的東西



過去我們最一開始學的C語言
是把  「資料/data」和「程式(序)/procedur」  做各自管理的!!!!



Class                          vs                           structure

整合                                                         各自管理







至於 我們的 C++  可以將相關的資料作整合,整合到特定的類別當中,而類別可以對應需要
重複組合利用,因此可將複雜程式簡單化。




「C++物件導向程式設計功能」

物件導向程式設計是使用到了「資料」和其
「操作程序(函數)」的總括。




至於資料和其操作程序總括後的東西,我們稱之為「物件」




假設有一個  「橘子箱物件」





裏頭會包含捨麼呢????

我需要幾顆橘子 ?

這個物件會有一個

--->  橘子數量的資料欄位

---> 數橘子的程序

橘子需要裝箱/取出!!!!!

--->裝入橘子的程序
--->取出橘子的程序



「類別之概念」

類別就想成是C語言structure擴充後的產物


C語言  structure 雖然可把多個型別的變數總括整理

但Class不單單只有包含變數,就連函數也包含喔!!!






在Class中

變數 : 「成員變數」

函數 : 「成員函數」

總稱類別所包含的元素為「成員」


類別  就好比如  對應變數的型別(int 、 double、char、...)

它自身並無法收納值。

因此在類別原來的地方,有必要製作可收納值的「實體」

「實體」 又稱為「物件」


類別就好比如 物件的設計圖  喔!!!!!



準備開始一個簡單   橘子箱物件的製作

首先準備好  基礎架構







按一下 Tab即可


如果不需要下面預設的兩個建構函式和解構函式
就刪除或者用小番茄來插入class

PS:與類別名稱同名的方法稱之為「建構函式」 (constructor) 
前面加上~ 且 與類別名稱同名的方法 就叫做
「解構函式」(destructor) 



建構函數 (constructor) 

是一種特別的成員函數 (member function) ,與類別同名並且沒有回傳值 (return value) ,因為這是在類別 (class) 實際建立物件 (object) 時執行的函數。

如果自己沒有定義建構函數,編譯器 (compiler) 會補上預設的建構函數。

解構函數 (destructor) 

為程式結束執行銷毀物件 (object) 之用,
通常編譯器 (compiler) 會提供預設的解構函數




透過小番茄來插入class


Visual Assit (Whole Tomato)


首先開啟Visual Studio 2015 Community之後
上方工具列 :

工具(Tools) ==> 擴充功能和更新(Extensions and Updates)







Visual Assist是為Microsoft Visual Studio開發一款外掛程式。

它對Visual Studio的智能提示(Intellisense)功能和代碼高亮功能進行了增強,同時還增加了代碼提示功能和重構功能,並對程序注釋加入了拼寫檢查功能。它還可以檢測一些基本的語法錯誤,如使用未聲明的變數等。支持C/C++,C#,Visual Basic等語言, 能自動識別各種關鍵字、系統函數、成員變量、自動給出輸入提示、自動更正大小寫錯誤、自動標示錯誤等, 有助於提高開發過程的自動化和開發效率。


Step1類別的定義










Step2.成員函數 / 成員變數的宣告



小番茄的自動提示  可以加速開發者的時間
Tab鍵協助開發者迅速鍵入對應參數




類別之定義

類別名稱::成員函數( 參數 )
{
      public:
      ......
      private:
      ......
}

成員函數之宣告

類別名稱::成員函數( 參數 )
{
      public:
                void Add(int addorange);//橘子不夠需要添加
void Del(int delorange);//橘子爛了要取出
void Empty();//橘子箱空了
      private:
      ......
}

成員變數之宣告

類別名稱::成員函數( 參數 )
{
      public:
                void Add(int addorange);//橘子不夠需要添加
void Del(int delorange);//橘子爛了要取出
void Empty();//橘子箱空了
      private:
                int total; 
}



【Hint:成員函數中的名字只有在類別中見效,
所以在類別的外側(普通函數)or
利用類別定義相同名稱的函數也沒問題喔!!!】


Step2.定義類別中的成員函數

【Hint:成員函數本身的定義,也可和類別之定義同時進行】

內部成員函數定義











Step3.物件的產生

根本就是變數的宣告~~



現在是以橘子箱作為例子

產生了一個物件名稱為myOrg的物件
該物件對應到 orangeBox類別  所以可以使用

orangeBox類別中的成員變數及成員函數


Step4.多個物件的產生/成員函數的呼叫(調用)

生成多個物件

其餘成員函數的外部定義







第一階段學習code


#include<iostream>
using namespace std;

class orangeBox
{
    public:
        /*成員函數*/
        void Add(int addorange);//橘子不夠需要添加
        void Del(int delorange);//橘子爛了要取出
        void Empty();//橘子箱空了
        int GetTotal()//用成員函數GetTotal()求出一箱橘子總共多少顆
        {
            return total; // 成員函數本身的定義
        }
    protected:
    private:
        /*成員變數*/
        int total; 
};

void orangeBox::Add(int addorange)
{
    total += addorange;
}




void orangeBox::Del(int delorange) 
{
    total -= delorange;
}

void orangeBox::Empty()
{
    total = 0;
}

int main(int argc, char**argv)
{
    orangeBox myOrg1;
    orangeBox myOrg2;
    orangeBox myOrg3;

    /*第一箱要運到桃園的橘子要30個*/
    myOrg1.Empty();
    myOrg1.Add(30);
    std::cout << "第一箱要運到桃園的橘子要30個" << endl;
    std::cout << myOrg1.GetTotal() << endl;
    /*第二箱要運到新竹的橘子要25個*/
    myOrg2.Empty();
    myOrg2.Add(25);
    std::cout << "第二箱要運到新竹的橘子要25個" << endl;
    std::cout << myOrg2.GetTotal() << endl;
    /*第三箱原本已經爛掉的14顆橘子先清空*/
    myOrg3.Empty();
    myOrg3.Add(14);
    std::cout << "第三箱清空前在上個月加了14顆到這個月已腐爛" << endl;
    std::cout << myOrg3.GetTotal() << endl;
    myOrg3.Empty();
    std::cout << "第三箱清空後" << endl;
    std::cout << myOrg3.GetTotal() << endl;


    system("PAUSE");
    return 0;
}

第二階段學習code



#include<iostream>
using namespace std;

class orangeBox
{
    public:
        /*成員函數*/
        void Add(int addorange);//橘子不夠需要添加
        void Del(int delorange);//橘子爛了要取出
        void Empty();//橘子箱空了
        int GetTotal()//用成員函數GetTotal()求出一箱橘子總共多少顆
        {
            return total; // 成員函數本身的定義
        }
    protected:
    private:
        /*成員變數*/
        int total; 
};

void orangeBox::Add(int addorange)
{
    total += addorange;
}




void orangeBox::Del(int delorange) 
{
    total -= delorange;
}

void orangeBox::Empty()
{
    total = 0;
}

int main(int argc, char**argv)
{
    orangeBox myOrg1;
    
    
    myOrg1.Empty();
    myOrg1.Add(5);
    myOrg1.Del(2);
    cout << myOrg1.GetTotal();



    system("PAUSE");
    return 0;
}


Little  Note : 在前面的 private  和  public

究竟代表捨麼意思???!!

public  和  private 這些東西

我們稱之為 「存取指定子」

public :

可以從其他物件成員函數  or 普通函數 進行存取

當然在同一物件內的成員函數也可進行存取~~~~




private : 

不可以從其他物件成員函數  or 普通函數 進行存取


必須在同一物件內的成員函數也可進行存取~~~~









以上是這次學習文分享






留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header