C 類於物件 類的引入,定義以及作用域

2021-10-23 08:06:14 字數 3113 閱讀 2252

本章將講述以上五個內容

在c語言中,它主要是面向過程,即c語言主要關注的是過程,給你乙個問題,你通過計算以及呼叫若干函式,一步步分析出求解問題的步驟,通過函式呼叫解決問題。注重的是過程

而c++中,它是基於物件導向的,重點關注的是物件,比如,將一件事情拆分成不同的小事情,這乙個個小事情便是物件,通過物件間的互動完成這件事。此外,什麼是物件?說白了,物件就是變數的意思,大家可以理解為它是變數的另一種叫法。

有了這樣一定的理解後,我們再向下看

類是什麼?我的理解,它是一群具有類似屬性的變數的集合。舉個例子,我是學生,那麼我可以屬於學生這個類,那我有什麼屬性呢?我的身高,體重,年齡等都是我的屬性,而這一系列屬性組成了乙個集合,這個集合就可以稱為類。

我們之前在c語言中學過結構體這個型別,它裡面就可以自定義設定變數,但是,c語言中是沒有類這個概念的,當然我們可以認為c語言中的結構體相當於c++中的類,不過c語言中的結構體中是不能定義函式的。

c++中,這樣的結構體我們稱為類。它裡面是可以定義函式的。比如:

struct student

void

output()

//列印學生的資訊

};

上面定義了乙個有關學生屬性的集合,包含姓名,年齡,序號這三個屬性以及設定學生資訊和列印學生資訊,這就是乙個類。不難看出,當我們在類中定義了函式時,是可以直接使用類中定義的變數的。在struct中,如果不加以設定,預設這些變數是公共的(public,後續將會講到)。但是,我們通常習慣使用class這個關鍵字來定義類。

通過上述不難看出類的定義形式如下

class classname//定義乙個類,後面更上這個類的名

;//切記,這裡要加上大括號

class為定義類的關鍵字,classname為這個類的名字,{}中是類的主題,裡面包含成員變數和成員函式。

類有兩種定義方式

1.宣告和定義都在類中

class person

};

需要注意的是,如果成員函式在類中定義的,編譯器可能會把它當作內聯函式處理

2.類的宣告放在.**件中,類的定義在.cpp檔案中

比如下面是乙個person.**件,我們在這裡定義這個類

//在.**件中宣告類

class person

};

我們再在.cpp檔案中定義這個類

#include

"person.h"

void person:

:printpresoninof()

如果在.**件中宣告類,在.cpp檔案中定義類,那麼這個類成員函式呼叫時前面要加上 「類名::成員函式」,這樣才能指定這個函式是屬於這個類的。一般,更推薦使用第二種類的定義形式

在上述舉例中,看到有使用public,這就是乙個類的訪問限定符。類的訪問限定符一共有三種:

public(公有)

protected(保護)

private(私有)

說明:1.public修飾的成員是公有的,在類外可以直接被訪問

2.protected和private修飾的成員在類外不能直接被訪問(此處protected和private是類似的)

3. 訪問許可權作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現時為止

比如:

class person

};

_name,_age,_***都是公有的而_banknum,_bankpassword都是私有的。

4. class的預設訪問許可權為private,struct為public(因為struct要相容c)

5. 只限制成員在類外的訪問許可權,類內部不受訪問限定符的限制

注意:訪問限定符只在編譯時有用,當資料對映到記憶體後,沒有任何訪問限定符上的區別

封裝

在c++類和物件階段,我們暫且討論封裝,那麼什麼是封裝呢?

封裝是指將資料和運算元據的方法進行有機結合,隱藏物件的屬性和實現細節,僅對外公開介面來和物件進行 互動。

比如,我們發掘出來了某一古老遺址,如果不加以保護,那麼就會被隨意的破壞,所以我們建造一座房屋,將他封裝起來,但是我們的目的是為了供人們欣賞,所以我們開放了售票通道,可以通過買票以及一定的監管機制下參觀欣賞這片遺址。類也一樣,我們使用類資料以及方法時將它封裝起來。如果不想給別人看我們就用private或protected來修飾,僅開放一些共有的成員函式來供外界對成員的合理訪問。其實封裝的本質就是一種管理。

有了類的定義,就有類的作用域。我們定義以下這個類

class student

void

setid

(int id)

void

setnumber

(int number)

private:

//私有的成員在類外不可見

//成員變數, 屬性

int _number;

int _id;

protected:

// 保護的成員在類外不可見

char name[10]

;char gender[10]

;char major[10]

;};void setstudent()

上面的setstudent()中,注釋掉的都是錯誤的,因為_id是私有成員name為受保護的成員,因此,在外部是不可以被訪問的,但是可以通過類中的函式來賦值就有st.setid(20)

今天學習了類和物件的定義格式以及類和物件的記憶體分析

今天學習了類和物件的定義格式以及類和物件的記憶體分析 1 首先需要定義乙個類,然後再類裡面定義相應的屬性和方法 如 建立乙個人的類,人應該要有名字 年齡 等等,就在類中定義相應的資料型別屬性 如 class test string name int age 方法 public void test1 ...

C 封裝篇 類物件的定義

1 物件的例項化 在c 中類是乙個模板,物件的例項化其實就是計算機根據乙個類的設計製造出多個物件的過程。物件例項化有兩種方式 2 從棧例項化 class tv 類名 物件 int main void tv tv tv tv 20 return 0 3 從堆例項化物件 int main int p n...

c 類和C 中定義類的定義

c 類和c 中定義類的定義 相同處 1.1.都需要使用 class標識 1.2.都包含有成員 函式,屬性 1.3.都有private public protect 標識的成員 2.不同之處 2.2.c 申明類及成員時格式 class member 一般在class的末尾處需要乙個英文分割符號 pub...