1. 程式人生 > >C++類(Class)的定義與實現

C++類(Class)的定義與實現

一、"類" 的介紹
    在C++中, 用 "" 來描述 "物件", 所謂的"物件"是指現實世界中的一切事物。那麼類就可以看做是對相似事物的抽象, 找到這些不同事物間的共同點, 如自行車和摩托車, 首先他們都屬於"物件", 並且具有一定得相同點, 和一些不同點, 相同點如他們都有質量、都有兩個輪子, 都是屬於交通工具等。"都有質量"、"兩個輪子"屬於這個物件的屬性, 而"都能夠當做交通工具"屬於該物件具有的行為, 也稱方法。

    類是屬於使用者自定義的資料型別, 並且該型別的資料具有一定的行為能力, 也就是類中說描述的方法。通常來說, 一個類的定義包含兩部分的內容, 一是該類的屬性, 另一部分是它所擁有的方法

。以 "人類" 這個類來說, 每個人都有自己的姓名、年齡、出生日期、體重等, 為 人類 的屬性部分, 此外, 人能夠吃飯、睡覺、行走、說話等屬於人類所具有的行為。

    上面舉例中所描述的 "人" 類僅僅是具有人這種物件的最基礎的一些屬性和行為, 可以稱之為人的"基類"。 再說說一些具有一些職業的人, 例如學生, 一個學生還具有"基類"中所沒有的屬性, 如學校、班級、學號; 也可以具有基類所不具有的行為, 如每天需要去上課, 需要考試等。

    學生類可以看做是基類的一個擴充套件, 因為他具有基類的所有屬性和行為, 並且在此基礎上增加了一些基類所沒有的屬性和行為, 像"學生"這樣的類稱為"人類"這個基類的"派生類
"或者"子類"。在學生的基礎上海可以進一步的擴展出其他更高階的類, 如"研究生"類。


    到此, 我們不再更深的去介紹類的其他相關知識。



二、C++類的定義

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

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

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

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

        ②. public 與 private 為屬性/方法限制的關鍵字, private 表示該部分內容是私密的, 不能被外部所訪問或呼叫, 只能被本類內部訪問; 而 public 表示公開的屬性和方法, 外界可以直接訪問或者呼叫。


            一般來說類的屬性成員都應設定為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;
}


執行輸出:

x = 10
        y = 20

與類的定義相比, 在類內實現成員函式不再是在類內進行宣告, 而是直接將函式進行定義, 在類中定義成員函式時, 編譯器預設會爭取將其定義為 inline 型函式 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) 這種形式, 其返回型別、成員函式名、引數列表都要與類內宣告的形式一致。

四、物件的作用域、可見域與生存週期
    類物件的作用域、可見域以及生存週期與普通變數的保持相同, 當物件生存週期結束時物件被自動撤銷, 所佔用的記憶體被回收, 需要注意的是, 如果物件的成員函式中有使用 new 或者 malloc 申請的動態記憶體程式不會對其進行釋放, 需要我們手動進行清理, 否則會造成記憶體洩露。

相關推薦

C++定義物件建立

C++類內成員變數預設private,外部物件不能直接訪問 #include<iostream> using namespace std; #include<stdlib.h>

有理數定義實現

一個有理數是由一個分子和分母組成的a/b形式的數。我們知道一般程式語言裡已經定義了整形類,浮點型,字元型,但並不支援有理數型。這對於分數的精確計算如1/3=0.33333....不能用double 或者float精確表示,所以有必要自己定義一個有理數類Rational類:

C++介面的定義實現

1.介面的定義與實現 所謂的介面,即將內部實現細節封裝起來,外部使用者用過預留的介面可以使用介面的功能而不需要知曉內部具體細節。C++中,通過類實現面向物件的程式設計,而在基類中只給出純虛擬函式的宣告,然後在派生類中實現純虛擬函式的具體定義的方式實現介面,不同派生類實現介面

C++的設計實現規範

規範是一種規定,遵守這種規定能夠帶來長遠的利益,而違反這種規定卻不會立即收到懲罰。程式設計的規範是人們在長期的程式設計實踐中總結出來的,深入理解這些規範需要認真的思考和大量的實踐 。不符合程式設計規範的程式碼也能通過編譯並執行,但是從長遠來看,程式碼存在可讀性差

C++class)的定義實現

一、"類" 的介紹    在C++中, 用 "類" 來描述 "物件", 所謂的"物件"是指現實世界中的一切事物。那麼類就可以看做是對相似事物的抽象, 找到這些不同事物間的共同點, 如自行車和摩托車, 首先他們都屬於"物件", 並且具有一定得相同點, 和一些不同點, 相同點如他

C++(Class)的定義實現

一、"類" 的介紹    在C++中, 用 "類" 來描述 "物件", 所謂的"物件"是指現實世界中的一切事物。那麼類就可以看做是對相似事物的抽象, 找到這些不同事物間的共同點, 如自行車和摩托車, 首先他們都屬於"物件", 並且具有一定得相同點, 和一些不同點, 相

C++定義實現Class

#include <iostream> using namespace std; class Point { public: void setPoint(int x, int

【轉載】學習C++ -> (Classes)的定義實現

人的 博文 有一個 能夠 基本數據 ntp 一是 簡單 空間 一、"類" 的介紹 在C++中, 用 "類" 來描述 "對象", 所謂的"對象"是指現實世界中的一切事物。那麽類就可以看做是對相似事物的抽象, 找到這些不同事物間的共同點, 如自行車和摩托車, 首先他們都屬

C++學習筆記————定義使用

練習1,建立一個可以求自身面積與周長的矩形類 # include <iostream> // 此處class關鍵字也可以換成struct關鍵字 class Rectangle { public: double w, h; //周長函式和麵積函式都是內聯成員

C++ 直接定義物件new物件的區別

new建立類物件與直接定義的區別 new建立物件的特點 new建立類物件需要指標接收,一處初始化,多處使用 new建立類物件使用完需delete銷燬 new建立物件直接使用堆空間,而區域性不用new定義類物件則使用棧空間 new物件指標用途廣泛,比如作

C++定義結構體的一些問題解決

coding一段程式碼,發現在C++類中定義結構體有一些問題。 開始是這樣 class Student{ private: typedef struct { string _courseNumber; double _score; struct _cour

[C++]模板的宣告實現分離問題

本文,記錄C++模板類的實現。 實驗環境: linuxg++c++98 模板類的宣告與實現分離錯誤 目的:實現一個bag類 做法:模板類bag的宣告與實現分離,也就是.cpp和.h檔案分離 此

C++中class定義的簡單應用

#include<iostream> using namespace std; class stu{ /*定義類 */ protected: /*保護 ,不能被類外成員訪問 */ int high; int weight; private: /

C++定義,成員函數的定義,對象的創建使用

color ostream err c++ div span bsp 但是 style ---恢復內容開始--- 類是一個模板,可用類生成一系列可用的實例。例如 int B就是生成了一個符合int的數據B,類也是一樣,使用類名就可以直接生成一個實例, 該實例中包含類中所

[編織消息框架][netty源碼分析]7 Unsafe 實現NioSocketChannelUnsafe職責實現

實現 final .get 綁定 emp 通知 com over dex Unsafe 是channel的內部接口, 負責跟socket底層打交道。從書寫跟命名上看是不公開給開發者使用的,直到最後實現NioSocketChannelUnsafe也沒有公開出去 publ

MVC之排球比賽計分程序 ——(三)model的設計實現

比賽 用戶 count class 包括 result 控制 類的設計 可能 實體類是現實實體在計算機中的表示。它貫穿於整個架構,負擔著在各層次及模塊間傳遞數據的職責。一般來說,實體類可以分為“貧血實體類”和“充血實體類”,前者僅僅保存實體的屬性,而後者還包含一些實體間的關

模型的設計實現(四)

介紹 傳遞數據 規則 添加 play using ota 實體類 重要 實體類是現實實體在計算機中的表示。它貫穿於整個架構,負擔著在各層次及模塊間傳遞數據的職責。 一般來說,實體類可以分為“貧血實體類”和“充血實體類”,前者僅僅保存實體的屬性,而後者還包含一些實體間的關系與

[編織消息框架][netty源碼分析]9 Promise 實現DefaultPromise職責實現

flush alt read true boolean listener seconds ren ces netty Future是基於jdk Future擴展,以監聽完成任務觸發執行Promise是對Future修改任務數據DefaultPromise是重要的模板類,其它

C++定義和聲明

程序 參考 clas 異同 key pointer 特性 設計 創建 參考:http://www.weixueyuan.net/view/6333.html 總結:   類相當於一個新的數據類型,定義類對象時,除了能定義單個變量以外,用類定義一個數組或者指針都是可行的。  

c++定義

類外定義1、#include <iostream> #include <string> #include<stdlib.h> using namespace std; class Teacher { public: void setName(string _name