- C++語言程序設(shè)計
- 千鋒教育高教產(chǎn)品研發(fā)部編著
- 1089字
- 2019-07-30 17:37:48
3.1 類的定義
類是面向?qū)ο蟪绦蛟O(shè)計的核心,是進行封裝和數(shù)據(jù)隱藏的工具。具體到代碼上,類是邏輯上有關(guān)的函數(shù)及其數(shù)據(jù)的集合,它主要不是用于執(zhí)行,而是提供所需要的資源。在使用一個類之前必須先定義類,定義一個類包含兩個步驟:一是說明類體中的成員;二是實現(xiàn)類體中的函數(shù)。
類將數(shù)據(jù)表示和操作數(shù)據(jù)的函數(shù)組合在一起,下面來看一個用于描述平面上一點的類。
首先,考慮如何表示平面上一個點,可以用直角坐標系中的x軸和y軸上的兩個數(shù)值分別表示平面上一個點的橫坐標與縱坐標,如果想要在程序開始時指定這個點的坐標,可以通過定義一個函數(shù)來實現(xiàn)這種操作,而類就是將數(shù)據(jù)和操作封裝在一起,如圖3.1所示。
在圖3.1中,x0與y0就表示直角坐標系中的x軸和y軸上的兩個數(shù)值,函數(shù)init()表示初始化一個點的坐標的操作,函數(shù)GetX()表示獲取這個點的橫坐標,函數(shù)GetY()表示獲取這個點的縱坐標,通常將對類中數(shù)據(jù)操作的函數(shù)稱為接口。因此,說明類體中的成員就是要說明它包含哪些成員,每個成員是什么類型。

圖3.1 說明類體中的成員
從上面的示例中可以歸納出說明類體中成員的語法,其語法格式如下:

其中,class是關(guān)鍵字,class之后是要定義的類名。類中的數(shù)據(jù)和函數(shù)都是類的成員,分別稱為數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員用來描述類狀態(tài)等屬性,由于數(shù)據(jù)成員常用變量來定義,因此有時又將這樣的數(shù)據(jù)成員稱為成員變量。成員函數(shù)用來對數(shù)據(jù)成員進行操作,又稱方法。注意,類體中大括號“}”后面的分號“;”不能省略。
類中關(guān)鍵字public、protected和private說明了類中成員與類外之間的關(guān)系,稱為訪問權(quán)限,如表3.1所示。
表3.1 訪問權(quán)限及含義

在說明類體中的成員時,也可以不定義成員的訪問權(quán)限,如果不定義,則默認為private。另外,在類體中,public、protected和private出現(xiàn)的順序與次數(shù)都是任意的。一般來說,比較好的格式是將公有成員都放在最前面,以突出用戶接口,私有成員放在后面。
在C++中也可以定義有struct和union說明的類,只是很少使用,其也可以定義成員的訪問權(quán)限,當成員的訪問權(quán)限不定義時,默認是public的。
說明類體中的成員只是對其中的成員函數(shù)進行了函數(shù)聲明,因此還必須在程序中定義這些成員函數(shù)的實現(xiàn),具體示例如下:

其中,“::”稱為作用域運算符,“類名::”表示其后的成員函數(shù)是在類體中被聲明過的。在成員函數(shù)體內(nèi)可以對類中的任何成員直接使用,不論是公有的還是私有的、保護的,也可以調(diào)用系統(tǒng)提供的庫函數(shù),以及其他已定義的一些普通函數(shù)。
例如,定義一個用于描述平面上一點的類,具體示例如下:

在上例中,簡單的成員函數(shù)經(jīng)常定義成內(nèi)聯(lián)函數(shù),定義的方法有兩種:一種是在說明類體時,直接在類體內(nèi)部定義函數(shù)體,系統(tǒng)將自動把這個函數(shù)當成內(nèi)聯(lián)函數(shù);另一種是在類體外通過inline關(guān)鍵字定義。
- 現(xiàn)代C++編程:從入門到實踐
- Learning Cython Programming(Second Edition)
- Mastering matplotlib
- Instant 960 Grid System
- TypeScript實戰(zhàn)指南
- MySQL數(shù)據(jù)庫管理與開發(fā)(慕課版)
- Elasticsearch for Hadoop
- JavaScript入門經(jīng)典
- Flutter跨平臺開發(fā)入門與實戰(zhàn)
- C# 8.0核心技術(shù)指南(原書第8版)
- Java EE核心技術(shù)與應(yīng)用
- SQL Server 入門很輕松(微課超值版)
- Mastering Elixir
- INSTANT JQuery Flot Visual Data Analysis
- Functional Python Programming