C 知識文件三 類的定義和使用

2021-07-29 08:38:24 字數 2722 閱讀 5717

類的定義和使用

客觀世界中的一切事物都可以視為物件。當然這些事物既有具體的物理實體(如:電視,電腦,洗衣機等),也可以是邏輯實體(如:部門、氣候等)。不管是哪一種物件他們都有兩方面的特徵:靜態特徵和動態特徵。所謂物件的靜態特徵就是能描述物件的一些屬性。如乙個部門的人數、經理名字等。所謂動態特徵就是物件表現出來的行為。比如部門例會,財務匯報和人員出差等。當把一些具有共性的物件歸類後形成乙個集合(抽象:對事物共性的歸納和集中),也就是所謂的類。所以我們可以這樣來描述類和物件之間的關係:類是物件的抽象,物件是累的例項。

類定義的一般形式為:

class類名

private:

//私有成員資料和私有成員函式(方法)

protected:

//保護成員資料和保護成員函式(方法)

public:

//公有成員資料和保護成員函式(方法)

例1.演示成員訪問限定符修飾成員時,成員訪問屬性的區別

#include

usingnamespace std;

classctest

private:

int m_icount;

protected:

bool m_bflag;

public:

void publicfun()

coutctest test;

//私有成員只能在本類內部訪問

//保護成員只能在本類內部和該類的派生類中訪問

test.publicfun();   //共有成員可以在類的外部訪問,也可以在類的內部訪問

return 0;

例2. 定義乙個蟲子類,然後例項化一條小蟲子,演示使用不同的成員運算子訪問物件成員

classcworm

protected:

int m_x,m_y;     //保護成員變數, 儲存當前螢幕座標

hbitmap m_hbmp;     //保護成員變數,儲存蟲子的

int m_idistance; //保護成員變數,儲存蟲子跑過的距離

void cumdistance(); //保護成員函式,累加蟲子跑過的距離

public:

cworm();   //建構函式,在例項化小蟲子時呼叫

cworm(int x,int y); //建構函式,在例項化小蟲子時呼叫

void draw(cdc *pdc);  //呼叫m_hbmp成員變數,把自己畫出來

void move(int x, int y);//請蟲子爬行

~cworm();     //析構函式,在蟲子犧牲時呼叫

intmain()

//使用'.'成員運算子訪問物件的成員

cworm worm(20,30);    //設定好小蟲子的初始螢幕座標,並在建構函式裡load自己的

worm.draw(&dc);       //在螢幕上把自己畫出來

worm.move(100,100);   //移動小蟲子到100,100

worm.draw(&dc);       //在當前座標再一次畫小蟲子

//當將乙個指標指向物件後,就需要使用'->'運算子訪問物件的成員

cworm *pworm=new cworm(20,30);

pworm->draw(&dc);

pworm->move(100,100);

pworm->dram(&dc);

delete pworm;       //殺死小蟲子

return 0;

類的成員函式可以訪問該類的任何成員(自己訪問自己的成員,包括成員函式和成員變數)。

例3. 演示類的成員函式訪問同類的成員

#include

usingnamespace std;

classctest2

private:

void privatefunc()

cout<<"call privatefunction"void publicfunc(void *pvobj)

ctest2 *ptest=(ctest2 *)pvobj;

ptest->privatefunc();

voidmain()

ctest2 test1,test2;

test1.publicfunc(&test2);

成員函式的定義既可以在類宣告內,也可以分開定義,通常將類宣告放在.h檔案,類函式定義放在對應的.cpp檔案中。

內聯的方式:記住如果採用這種在類的內部定義成員函式的函式體的方式,在沒有加上inline的時候,這些成員函式自動為內聯函式。

classcworm

inline void move(int x, int y)

cumdistance(x,y);

分離的方式:在類的外部來定義成員函式的函式體,需要用域運算子::指明該函式屬於哪個類,跟普通函式區別開來。

voidcworm::move(int x, int y)

cumdistance(x,y);

注意:一般情況下我們提倡在標頭檔案.h中進行類的宣告,在對應的實現檔案.cpp中進行類的定義(主要是成員函式的定義)。因為這樣可以提高編譯效率。舉例來說,如果乙個工程中有100個地方應用到乙個類,需要包括該標頭檔案100次。如果類的宣告和定義不分開的話,該檔案需要編譯100次,如果分開的話只需要編譯一次,生成對應的.obj檔案即可。如此大大提高編譯效率,物件的成員資料和成員函式的儲存。物件的成員資料分開存放,但是同乙個類的所有物件共享成員函式**區。成員函式通過this指標區別不同物件的成員資料。

Python 複習(三) 類的定義和使用

2019 02 20 18 27 49 開學第一周,課程看似比較少,早上也只有周二和周五有第一節課,但如果不能堅持早起的話,實際時間是要比上學期短的。所以效率就顯得很重要了,最近在看番茄工作法和認知天性,希望能從中習得一些管理時間和學習的方法,以提高效率,然後打算了解一下短時間的深度睡眠,希望可以把...

C 的基礎知識(三) 類的使用

類的基本思想是資料抽象和封裝 在c 中,類和結構體的區別就是,結構體預設訪問許可權是public,而類是private。類是屬於使用者自定義的資料型別,通常來說,乙個類的定義包含兩部分的內容,一是該類的屬性,另一部分是它所擁有的方法。c 中使用關鍵字 class 來定義類,定義類的一些屬性和方法宣告...

C (三)類和物件概念及定義

概念 是一種程式設計泛型,同時也是一種程式開發的方法。物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性,靈活性,和擴充套件性。c 不是純物件導向語言,而是基於物件導向語言,因為包含c語言 1 public成員可從類外部直接訪問,private protected...