c++物件導向的三大特性:封裝、繼承、多型。
c++中萬物皆物件,物件包含屬性(成員變數/成員屬性)和行為(成員函式/成員方法)。
封裝的意義:
(1)將屬性和行為作為乙個整體,表徵現實的事物;
(2)對屬性和行為進行許可權控制。
訪問許可權包括3種:
public
:公共許可權——成員在類中和類外均可訪問。
protected
:保護許可權——成員在類中可訪問,類外不可訪問;子類可訪問父類的保護成員。
private
:私有許可權——成員在類中可訪問,類外不可訪問;子類不可訪問父類的私有成員。
注1:類的定義:protected
和private
的主要區別在於繼承方面,即子類是否可以訪問父類的相關成員: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)不同類的分檔案編寫:標頭檔案和原始檔中成員函式的寫法、標頭檔案包含;
標頭檔案:成員屬性和成員函式的宣告;原始檔:包含標頭檔案;成員函式的定義,使用作用域限定符
類名::成員函式名
指定成員函式所屬的類作用域。
注:標頭檔案中使用巨集(2)乙個類的成員屬性是另乙個類的物件(圓類的圓心是點類的物件);#pragma once
或#ifndef
,可防止標頭檔案被重複包含。
(3)分別使用全域性函式和成員函式【形參個數的不同】,判斷點和圓的位置關係;
(4)函式形參使用引用替代變數,可避免資料拷貝,減少記憶體占用。
示例:
①點類標頭檔案point.h
②點類原始檔point.cpp/* 標頭檔案:成員屬性和成員函式的宣告 */
#pragma once
//防止標頭檔案被重複包含
#include
using
namespace std;
class
point
;
③圓類標頭檔案circle.h/* 原始檔:成員函式的定義 */
//使用 作用域限定符 `類名::成員函式名` 指定成員函式所屬的類作用域
#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.cpp/* 標頭檔案:成員屬性和成員函式的宣告 */
#pragma once
//防止標頭檔案被重複包含
#include
using
namespace std;
#include
"point.h"
class
circle
;
⑤測試原始檔main.cpp/* 原始檔:成員函式的定義 */
//使用 作用域限定符 `類名::成員函式名` 指定成員函式所屬的類作用域
#include
"circle.h"
/* 半徑的設定與獲取 */
void circle::
setradius
(double r)
;double circle::
getradius()
;/* 圓心的設定與獲取 */
void circle::
setcenter
(point p)
;point circle::
getcenter()
;
#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...