C 類和物件

2021-08-04 11:45:09 字數 3584 閱讀 7787

我們知道c語言是面向過程的程式語言,而c++是物件導向(opp)的程式語言。 

物件導向是一種程式設計范型,也是一種程式開發的方法。而物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝在裡面,以提高軟體的重要性、靈活性和擴充套件性。

概念:(object oriented programming,縮寫:oop)是一種程式設計范型,同時也是一種程式開發的方法。 物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性。

類(class):

類是c++中的特有的,形似於c語言中的結構體! 

類有三大特性:封裝、繼承、多型

在乙個類中,可以分為兩種物件。分別是成員變數(資料)和成員函式(函式)

三種訪問限定符

:

1. public成員可從類外部直接訪問,

private/protected成員不能從類外部直接訪問

。2. 每個限定符在類體中可使用多次,它的作用域是從該限定符出現開始到下乙個限定符之前或類體結束前。

3. 類體中如果沒有定義限定符,則

預設為私有的

。4. 類的訪問限定符體現了物件導向的

封裝性。

作用域:

類的作用域:

1. 每個類都定義了自己的作用域,類的成員(成員函式/成員變數)都在類的這個作用域內,

成員函式內可任意訪問成員變數和其它成員函式。

2. 物件可以通過 

. 直接訪問

公有成員

,指向物件的指標通過

-> 

也可以直接訪問物件的公有成員。

3. 在類體外定義成員,需要使用 

:: 作用域解析符指明成員屬於哪個類域。

概念描述

類成員函式

類的成員函式是指那些把定義和原型寫在類定義內部的函式,就像類定義中的其他變數一樣。

類訪問修飾符

類成員可以被定義為 public、private 或 protected。預設情況下是定義為 private。

建構函式 & 析構函式

類的建構函式是一種特殊的函式,在建立乙個新的物件時呼叫。類的析構函式也是一種特殊的函式,在刪除所建立的物件時呼叫。

c++ 拷貝建構函式

拷貝建構函式,是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。

c++ 友元函式

友元函式

可以訪問類的 private 和 protected 成員。

c++ 內聯函式

通過內聯函式,編譯器試圖在呼叫函式的地方擴充套件函式體中的**。

c++ 中的 this 指標

每個物件都有乙個特殊的指標 this,它指向物件本身。

c++ 中指向類的指標

指向類的指標方式如同指向結構的指標。實際上,類可以看成是乙個帶有函式的結構。

c++ 類的靜態成員

類的資料成員和函式成員都可以被宣告為靜態的。

類的成員函式

是指那些把定義和原型寫在類定義內部的函式,就像類定義中的其他變數一樣。類成員函式是類的乙個成員,它可以操作類的任意物件,

可以訪問物件中的所有成員。

定義乙個簡單的類

class

box;

成員函式可以定義在類定義內部,或者單獨使用

範圍解析運算子 :: 

來定義。

在類定義中定義的成員函式把函式宣告為內聯的,即便沒有使用 inline 識別符號

。所以您可以按照如下方式定義 volume() 函式:

class

box};

也可以在類的外部使用

範圍解析運算子 ::

定義該函式,如下所示:

double

box::

getvolume

(void

)

需強調一點,在 :: 運算子之前

必須使用類名。

呼叫成員函式是在物件上使用點運算子(.)

,這樣它就能操作與該物件相關的資料,如下所示

box

mybox

;// 建立乙個物件

mybox

.getvolume

();// 呼叫該物件的成員函式

類例項化物件

1.類只是乙個模型一樣的東西,限定了類有哪些成員,定義出乙個類並沒有分配實際的記憶體空間來儲存它。

2.乙個類可以例項化出多個物件,例項化出的物件占用實際的物理空間儲存類

成員變數

。3.做個比方。類例項化出物件就像現實中使用建築設計圖建造出房子,類就像是設計圖,只設計出需要什麼東西,但是並沒有實體的建築

存在,同樣的類也只是乙個設計,例項化出的物件才能實際儲存資料,占用物理空間。

int main()

這裡的mybox就是box例項化出來的物件。 

在結構體中計算大小是所有成員的大小之和。而類的大小也是成員變數的大小之和。

類物件儲存模型

所以每個物件的大小為類中

所有成員變數的大小之和

,當然這裡也遵循記憶體對齊原則。

結構體內存對其規則:

1 . 第乙個成員在與結構體變數偏移量為0 的位址處。 

2 . 其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。 

//對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。 

v s中預設的值為8 

gcc中的預設值為4 

3 . 結構體總大小為最大對齊數(每個成員變數除了第乙個成員都有乙個對齊數)的整數倍。 

4 . 如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。

class b

;

這個簡單的類,他的大小就是char 和 double的大小,但要滿足對齊規則。所以大小就應該是16。

class b

;class c

;

對於巢狀的類求大小也滿足對齊規則,故大小應該為32

在類中有隱含的this指標

1 . 每個成員函式都有乙個指標形參,它的名字是固定的,稱為t his 指標,t his 指標是隱式的。(建構函式比較特殊,沒有這個隱含t his 形參)

2 . 編譯器會對成員函式進行處理,在物件呼叫成員函式時,物件位址作實參傳遞給成員函式的第乙個形參t his 指標。

3 . this 指標是成員函式隱含指標形參,是編譯器自己處理的,我們不能在成員函式的形參中新增t his 指標的引數定義,也不能在呼叫時顯示傳遞物件的位址給t his 指標。

但注意,this指標並不是使用者在編寫**時所要寫的,而是編譯器在處理成員函式時所要做的工作。

C 類和物件 類和物件

c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...

C 物件和類

1,特殊的類 字串string include include using namespace std int main 類似於標準庫函式,我們不需要記住每種 類 的全部操作,只需要在使用過程中記住一些常用的操作就可以了。如果有需要的話,可以求助於相關書籍或網路 2,當我們對string進行種種操作...

C (類和物件)

類成員函式 類的成員函式指標那些把定義和原型寫在類定義內部的函式,就想類定義中的其他變數一樣。類訪問修飾符 類成員可以定義為public,private或protected。預設情況下是定義為private。建構函式 類的建構函式是一種特殊的函式,在建立乙個新物件是呼叫。析構函式 類的析構函式也是一...