C 類和物件(一) 封裝

2021-10-17 05:26:09 字數 4623 閱讀 9348

c++物件導向的三大特性:封裝、繼承、多型。

c++中萬物皆物件,物件包含屬性(成員變數/成員屬性)和行為(成員函式/成員方法)。

封裝的意義

(1)將屬性和行為作為乙個整體,表徵現實的事物;

(2)對屬性和行為進行許可權控制

訪問許可權包括3種:

public公共許可權——成員在類中和類外均可訪問。

protected保護許可權——成員在類中可訪問,類外不可訪問;子類可訪問父類的保護成員。

private私有許可權——成員在類中可訪問,類外不可訪問;子類不可訪問父類的私有成員。

注1:protectedprivate的主要區別在於繼承方面,即子類是否可以訪問父類的相關成員:protected子類可訪問父類的保護成員;private子類不可訪問父類的私有成員。

注2:類中的函式內部,仍屬於類中,可訪問任意許可權的類成員。

注3:類class的預設許可權為私有private

注4:類的作用域屬於類內,如型別::成員,可訪問類中的私有成員私有建構函式

類的定義

class 類名

;

例項化:通過類建立乙個具體的物件。

示例

#include

using

namespace std;

const

double pi =

3.14

;class

circle

double

calculatearea()

};intmain()

c++中,結構體struct類class均可表徵乙個類,唯一區別在於預設的訪問許可權不同

(1)結構體struct的預設許可權為公共public

(2)類class的預設許可權為私有private

示例

/* 

結構體的預設許可權是公共public

類的預設許可權是私有private

*/class

class

;struct struct

;int

main()

將所有成員屬性設定為私有的優點

(1)可使用getter/setter函式控制讀寫許可權,避免成員屬性被外部直接訪問或修改;

(2)對於寫許可權,可使用邏輯判斷語句校驗寫入資料的有效性

示例

#include

using

namespace std;

#include

class

person

string getname()

void

setage

(int age)

_age = age;

}int

getage()

};intmain()

建立圓類(circle)和點類(point),根據點與圓心的距離判斷點和圓的位置關係。

重點

(1)不同類的分檔案編寫:標頭檔案和原始檔中成員函式的寫法、標頭檔案包含;

標頭檔案:成員屬性和成員函式的宣告;

原始檔:包含標頭檔案;成員函式的定義,使用作用域限定符類名::成員函式名指定成員函式所屬的類作用域。

注:標頭檔案中使用巨集#pragma once#ifndef,可防止標頭檔案被重複包含。

(2)乙個類的成員屬性是另乙個類的物件(圓類的圓心是點類的物件);

(3)分別使用全域性函式和成員函式【形參個數的不同】,判斷點和圓的位置關係;

(4)函式形參使用引用替代變數,可避免資料拷貝,減少記憶體占用。

示例

點類標頭檔案point.h

/* 標頭檔案:成員屬性和成員函式的宣告 */

#pragma once

//防止標頭檔案被重複包含

#include

using

namespace std;

class

point

;

點類原始檔point.cpp

/* 原始檔:成員函式的定義 */

//使用 作用域限定符 `類名::成員函式名` 指定成員函式所屬的類作用域

#include

"point.h"

#include

//數學方法

void point::

setx

(double x)

double point::

getx()

void point::

sety

(double y)

double point::

gety()

/* 成員函式:計算兩點的距離 */

//函式形參使用引用替代變數,可避免資料拷貝,減少記憶體占用

double point::

getdistance

(point &p)

圓類標頭檔案circle.h

/* 標頭檔案:成員屬性和成員函式的宣告 */

#pragma once

//防止標頭檔案被重複包含

#include

using

namespace std;

#include

"point.h"

class

circle

;

圓類原始檔circle.cpp

/* 原始檔:成員函式的定義 */

//使用 作用域限定符 `類名::成員函式名` 指定成員函式所屬的類作用域

#include

"circle.h"

/* 半徑的設定與獲取 */

void circle::

setradius

(double r)

;double circle::

getradius()

;/* 圓心的設定與獲取 */

void circle::

setcenter

(point p)

;point circle::

getcenter()

;

測試原始檔main.cpp

#include

using

namespace std;

#include

"point.h"

#include

"circle.h"

/* 全域性函式:計算兩點的距離 */

//函式形參使用引用替代變數,可避免資料拷貝,減少記憶體占用

double

g_getdistance

(circle &c, point &p)

/* 判斷點與圓的位置關係 */

void

isincircle

(double distance,

double radius)

else

if(distance == radius)

else

if(distance > radius)

}int

main()

C 類和物件(一) 封裝

2.struct 和class的區別 3.成員屬性設為私有 4.練習案例 c 物件導向的三大特性 封裝,繼承,多型c 認為萬事皆可為物件,物件上有其屬性和行為 例如 物件 車 屬性 輪胎,方向盤,喇叭,車燈 行為 載人,駕駛,照明 具有相同性質的物件,抽象位類 車屬於車類 將屬性和行為作為乙個整體,...

C 物件導向(一)封裝 類和物件

封裝 繼承 多型 封裝 組織 的過程,將 組織為乙個方法,將方法組織成類,將類組成元件,不同的元件組織為乙個系統。封裝可以方便使用者使用,並且能夠保證 的穩定性,安全性。類 一組相似物件的統稱。物件 乙個例項,是類的實現。類與物件的關係類物件 抽象具體 無狀態有狀態 是物件的模板 是類的例項 類與類...

一 封裝(C物件導向開發)

內容參考於 抽象接 術和元件開發規範及其思想 在c語言中,可以使用乙個c檔案 c 檔案 和 件完 h 檔案 成 類 的定義,將所有需要封裝的東西都存於c 檔案中,h 檔案中只展現那些對外可見 無需封裝 重點 的內容。1.示例1 乙個棧物件的例子。stack.h ifndef stack h defi...