C++的基礎知識(三)--類的使用

   類的基本思想是數據抽象和封裝 。
   在C++中,類和結構體的區別就是,結構體默認訪問權限是public,而類是private。
   類是屬於用戶自定義的數據類型,通常來說, 一個類的定義包含兩部分的內容, 一是該類的屬性, 另一部分是它所擁有的方法。C++中使用關鍵字 class 來定義類, 定義類的一些屬性和方法聲明:
     class 類名
    {
        public:
            //公共的行爲或屬性

        private:
            //公共的行爲或屬性
    };(請注意這個分號不能省略!)
   類的數據成員中不能使用 auto、extern和register等進行修飾, 也不能在定義時進行初始化。
   類的實現有兩種方式, 一種是在類定義時完成對成員函數的定義, 另一種是在類定義的外部進行完成。

   與類的定義相比, 在類內實現成員函數不再是在類內進行聲明, 而是直接將函數進行定義, 在類中定義成員函數時, 編譯器默認會爭取將其定義爲 inline 型函數。
#include <iostream>

        using namespace std;

        class Point
        {
            public:
                void setPoint(int x, int y) //實現setPoint函數
                {
                    xPos = x;
                    yPos = y;
                }

                void printPoint()       //實現printPoint函數
                {
                    cout<< "x = " << xPos << endl;
                    cout<< "y = " << yPos << endl;
                }

            private:
                int xPos;
                int yPos;
        };

        int main()
        {
            Point M;        //用定義好的類創建一個對象 點M
            M.setPoint(10, 20); //設置 M點 的x,y值
            M.printPoint();     //輸出 M點 的信息

            return 0;
        }    

輸出結果:

     x = 10
        y = 20

        Process returned 0 (0x0)   execution time : 0.406 s
        Press any key to continue.
   在類外定義成員函數通過在類內進行聲明, 然後在類外通過作用域操作符 :: 進行實現, 形式如下:
  返回類型 類名::成員函數名(參數列表)
        {
            //函數體
        }   
#include <iostream>

        using namespace std;

        class Point
        {
            public:
                void setPoint(int x, int y); //在類內對成員函數進行聲明
                void printPoint();

            private:
                int xPos;
                int yPos;
        };

        void Point::setPoint(int x, int y) //通過作用域操作符 '::' 實現setPoint函數
        {
            xPos = x;
            yPos = y;
        }

        void Point::printPoint()       //實現printPoint函數
        {
            cout<< "x = " << xPos << endl;
            cout<< "y = " << yPos << endl;
        }

        int main()
        {
            Point M;        //用定義好的類創建一個對象 點M
            M.setPoint(10, 20); //設置 M點 的x,y值
            M.printPoint();     //輸出 M點 的信息

            return 0;
        }
   以setPoint成員函數來說, 在類內聲明的形式爲void setPoint(int x, int y); 那麼在類外對其定義時函數頭就應該是void Point::setPoint(int x, int y)這種形式, 其返回類型、成員函數名、參數列表都要與類內聲明的形式一致。
  將一個類定義並實現後, 就可以用該類來創建對象了, 創建的過程如同 int、char 等基本數據類型聲明一個變量一樣簡單, 例如我們有一個Point類, 要創建一個Point的對象只需要:    Point 對象名;
  一般將類的實現放在.h頭文件中。
#include <iostream>
    #include "Point.h"

    using namespace std;

    int main()
    {
        Point M;        //用定義好的類創建一個對象 點M
        M.setPoint(10, 20);         //設置 M點 的x,y值
        M.printPoint();             //輸出 M點 的信息
        cout<< M.xPos <<endl;       //嘗試通過對象M訪問屬性xPos

        return 0;
    }
   通過 對象名.公有函數名(參數列表); 的形式就可以調用該類對象所具有的方法, 通過 對象名.公有數據成員; 的形式可以訪問對象中的數據成員。
   如果對象的成員函數中有使用new或者malloc申請的動態內存程序不會對其進行釋放, 需要我們手動進行清理, 否則會造成內存泄露。
發佈了36 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章