天天看點

C++之類(class)的定義與實作一、類的定義二、C++類的實作三、C++類的使用四、類對象成員介紹五、資料參考

一、類的定義

   C++中使用關鍵字 class 來定義類, 其基本形式如下:

class 類名
    {
        public:
            //公共的行為或屬性

        private:
            //公共的行為或屬性
    };
           

         說明:

        ①. 類名 需要遵循一般的命名規則;

        ②. public 與 private 為屬性/方法限制的關鍵字, private 表示該部分内容是私密的, 不能被外部所通路或調用, 隻能被本類内部通路; 而 public 表示公開的屬性和方法, 外界可以直接通路或者調用。

            一般來說類的屬性成員都應設定為private, public隻留給那些被外界用來調用的函數接口, 但這并非是強制規定, 可以根據需要進行調整;     

        ③. 結束部分的分号不能省略。

      執行個體類代碼部分:

      例子以設定和列印坐标點為依據

class Point
            {
                public:
                    void setPoint(int x, int y);//成員函數
                    void printPoint();

                private:
                    int xPos;//資料成員
                    int yPos;
            };
           

    代碼說明:

        上段代碼中定義了一個名為 Point 的類, 具有兩個私密屬性, int型的xPos和yPos, 分别用來表示x點和y點。在方法上, setPoint 用來設定屬性, 也就是 xPos 和 yPos 的值; printPoint 用來輸出點的資訊。

        類在定義時有以下幾點需要注意:

            ①. 類的資料成員中不能使用 auto、extern和register等進行修飾, 也不能在定義時進行初始化, 如int xPos = 0; //錯;

            ②. 類定義時 private 和 public 關鍵詞出現的順序和次數可以是任意的;

            ③. 結束時的分号不能省略, 切記!

二、C++類的實作

     上面的定義示例中我們隻是定義了這個類的一些屬性和方法聲明,并沒有去實作它, 類的實作就是完成其方法的過程。

     類的實作有兩種方式, 一種是在類定義時完成對成員函數的定義, 另一種是在類定義的外部進行完成。

1、在類定義時定義成員函數

#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;
        }
           

2、在類外定義成員函數

    在類外定義成員函數通過在類内進行聲明, 然後在類外通過作用域操作符 :: 進行實作, 形式如下:

傳回類型 類名::成員函數名(參數清單)
        {
            //函數體
        }
           

    将上面類定義時的代碼改成類外定義成員函數

#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)  這種形式, 其傳回類型、成員函數名、參數清單都要與類内聲明的形式一緻。

三、C++類的使用

類對象的建立:

   将一個類定義并實作後, 就可以用該類來建立對象了, 建立的過程如同 int、char 等基本資料類型聲明一個變量一樣簡單, 例如我們有一個Point類, 要建立一個Point的對象隻需要:

Point 對象名;
           

   建立一個類的對象稱為該類的執行個體化, 在建立時我們還可以對對象的屬性進行相關的初始化, 這樣在建立完成後該對象就已經具有了一定得屬性, 這種建立方式将在下一篇博文中進行學習。

  将類進行執行個體化後系統才會根據該對象的實際需要配置設定一定的存儲空間。這樣就可以使用該對象來通路或調用該對象所能提供的屬性或方法了。

         仍以上面的代碼為例子,我們 建立類W;并把Point類的實作放在頭檔案Point.h中;

頭檔案Point.h:

#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;
}
           

main函數:

#include <iostream>
#include "Point.h"

using namespace std;

int main()
{
	Point F;        //用定義好的類建立一個對象 點M
	F.setPoint(11, 20);         //設定 M點 的x,y值
	F.printPoint();             //輸出 M點 的資訊
	//cout << M.xPos << endl;       //嘗試通過對象M通路屬性xPos

	return 0;
}
           

結果:

C++之類(class)的定義與實作一、類的定義二、C++類的實作三、C++類的使用四、類對象成員介紹五、資料參考

    代碼在編譯時會出現錯誤, 提示 error: 'int Point::xPos' is private, 這是 cout<< M.xPos <<endl; 這行造成的, 他試圖通路一個 private 對象中的私密資料 xPos, 如果将這行去掉便可正常運作。

    通過 對象名.公有函數名(參數清單); 的形式就可以調用該類對象所具有的方法, 通過 對象名.公有資料成員; 的形式可以通路對象中的資料成員。

四、類對象成員介紹

#include <iostream>
using namespace std;

class Point
{
public:
	Point(int x = 0, int y = 0) :xpos(x), ypos(y)
	{
		cout << "函數開始調用A"<<endl;
	}
	void printA()
	{ 
		cout << "調用A" << endl;
		cout << "(" << xpos <<","<< ypos << ")" << endl;
	}
private:
	int xpos;
	int ypos;
};
class B
{
public:
	B(int x, int y, int x1, int y1) :M(x, y), N(x1,y1){ cout << "函數開始調用B"<<endl; }
	void printB()
	{ 
		cout << "調用B" << endl;
		M.printA(); 
		N.printA();
	}
private:
	Point M;
	Point N;
};

int main()
{
	Point A(100);
	A.printA();
	cout << "//" << endl;
	B C(1, 2, 3, 4);
	C.printB();

	return 0;
}
           

結果:

C++之類(class)的定義與實作一、類的定義二、C++類的實作三、C++類的使用四、類對象成員介紹五、資料參考

代碼說明:

     通過初始化表達式對象 A 中的 M、N 資料成員的初始化順序如下: 首先 M 對象的構造函數被調用, 接着調用 N 對象的構造函數, 最後 B類的構造函數被調用, 這樣便完成了類對象成員的初始化。

五、資料參考

The use of class about C++

繼續閱讀