c 類和物件的詳細介紹(一)

2021-08-19 06:42:38 字數 3523 閱讀 7580

1.什麼是封裝

第一層含義:封裝是物件導向程式設計最基本的特性。把資料(屬性)和函式(方法)合成乙個整體,這在計算機世界中是用類和物件實現的。(把屬性和方法進行封裝)

第二層含義:把客觀事物封裝成抽象的類,並且類可以把自己的屬性和方法只讓可信的類或者物件操作,對不可信的進行資訊的隱藏。(對屬性和方法進行訪問控制)

2.類的訪問控制

在c++中可以對類的屬性和方法定義訪問級別,public修飾的屬性和方法,可以在類的內部訪問,也可以在類的外部進行訪問。private修飾的屬性和方法,只能在類的內部進行訪問。

3.類的意義

類是把屬性和方法進行封裝,同時對類的屬性和方法進行訪問控制。

類是由我們根據客觀事物抽象而成,形成一類事物,然後用類去定義物件,形成這類事物的具體個體。

類是乙個資料型別,類是抽象的,而物件是乙個具體的變數,是占用記憶體空間的。

4,圓類的抽象和封裝

#includeusing namespace std;

/* 抽象乙個圓類,並對圓的屬性和方法進行封裝 */

class circle

double getr() /* 獲取圓的半徑 */

};

1.前言

當我們建立乙個物件的時候,常常需要做某些初始化操作,例如屬性進行賦初值。為了解決這個問題,c++編譯器提供了建構函式來處理物件的初始化。建構函式是一種特殊的成員函式,與其他成員函式不同,不需要使用者來呼叫它,而是在建立物件時自動執行。

2.建構函式的定義及呼叫方式

定義:c++類中可以定義與類名相同的特殊成員函式,這種與類名相同的成員函式叫做建構函式。建構函式可以有引數列表,但是不能有函式返回值。

呼叫:一般情況下c++編譯器會自動呼叫建構函式,但在一些情況下則需要手工呼叫構造方法。

3.建構函式的分類

無參建構函式:建構函式沒有函式引數。

有參建構函式:建構函式有函式引數。

拷貝建構函式:建構函式的引數為const classname &vriable。

4.無參建構函式示例及呼叫

# includeusing namespace std;

/* 抽象乙個圓類,並對圓的屬性和方法進行封裝 */

class circle

void setr(double r) /* 設定圓的半徑 */

double getr() /* 獲取圓的半徑 */

};int main()

5.有參建構函式示例及呼叫
# includeusing namespace std;

/* 抽象乙個圓類,並對圓的屬性和方法進行封裝 */

class circle

void setr(double r) /* 設定圓的半徑 */

double getr() /* 獲取圓的半徑 */

};int main()

6.拷貝建構函式示例及呼叫

1.拷貝建構函式的呼叫方式

當用物件1初始化物件2的時候拷貝建構函式被呼叫。

當用物件1括號方式初始化物件2的時候拷貝函式被呼叫。

當用物件(此處是元素而而非指標或引用)做函式引數的時候,實參傳遞給形參的過程會呼叫拷貝建構函式。

當用物件(此處是元素而而非指標或引用)做函式返回值的時候,若用同一型別來接收該返回值,則會執行拷貝建構函式(此時會涉及到匿名物件的去和留的問題,因為函式的返回物件是個匿名物件)。

2.拷貝構造函式呼叫方式示例

# includeusing namespace std;

class location

location(int x,int y)

location(const location& location)

~location()

};/* 模擬拷貝構造函式呼叫方式三 */

void setlocation(location location)

/* 模擬拷貝構造函式呼叫方式四 */

location getlocation()

/* 研究拷貝建構函式的呼叫 */

int main()

~student()

cout << "析構函式被執行..." << endl;

}void print()

};int main()

1.物件初始化列表

當我們有乙個類成員,它本身是乙個類,而且這個成員只有乙個帶引數的建構函式,沒有預設建構函式,這個時候要對這個類成員進行初始化,就必須呼叫這個類成員的帶參建構函式,這個時候可以在定義成員的時候採用該建構函式初始化物件,但是我們想要動態的初始化,則需要將該成員動態接受外界資料,因此出現了物件初始化列表這個概念。

2.類中成員為const修飾

當我們有個類成員,它被const修飾,那麼在初始化的時候可以直接在定義變數的時候初始化,也可以在使用物件初始化列表的時候進行初始化。

3.物件初始化示例

# includeusing namespace std;

/* 定義a類 */

class a

~a()

};/* 定義類b */

class b

~b()

};int main()

4.建構函式和析構函式的執行順序

當類中有成員是其他類的物件時,首先呼叫成員變數的建構函式,呼叫順序和成員變數的定義順序一致。成員變數的建構函式統統執行完畢後,再呼叫該類的建構函式。

析構函式的執行順序是「倒關」的方式,即先與建構函式的執行順序相反。

1.拷貝建構函式的執行原理

拷貝建構函式有四種呼叫方式,當我們不寫拷貝建構函式的時候,c++預設的幫我們寫了拷貝建構函式,其函式體實現的是簡單的成員變數的值的拷貝。這種預設的拷貝方式,我們稱為淺拷貝,即只是簡單的複製成員變數的值到另乙個物件中。

2.深拷貝問題的丟擲

當我們的成員變數是動態分配的一組堆記憶體的時候,這個時候c++預設的為我們寫的拷貝建構函式把成員變數的值進行了複製,那麼副本也會指向原始物件所分配的堆記憶體,當我們在析構函式中釋放堆記憶體的時候,就會發生兩次析構現象(一次是原始物件釋放堆記憶體,一次是副本物件釋放堆記憶體)因此造成程式崩潰。

3.深拷貝**示例

# define _crt_secure_no_warnings

# includeusing namespace std;

class student

/* 有參建構函式 */

student(char * name, int age)

/* 拷貝建構函式 */

student(const student &student)

/* 析構函式 */

~student()

cout << "析構函式被執行..." << endl;

}void print()

};int main()

Java中類和物件詳細介紹

物件是事物存在的實體,通常又會將物件劃分為兩個部分,物件的屬性和物件的行為 類就是一類事物的總稱,如果將某個事物抽象為物件,那麼類就是這個物件的總稱 xx類 例項化 xx物件 類是封裝物件的屬性和行為的載體,物件則是類的例項。封裝封裝是物件導向程式設計的核心思想,將物件的屬性和行為封裝起來,對使用者...

c 類和成員的修飾詳細介紹

基本概念 一.類是對於業務處理物件的封裝,包括狀態和行為的封裝.二.類的成員種類 1.常量 資料值恆定不變的乙個符號 2.欄位 字段表示乙個唯讀或者可讀寫的資料值.通常用字段來標識乙個類或者類產生物件的某種狀態,在實踐中,通常將字段標識為private,避免從類 物件外破壞類 物件的狀態。3.例項構...

C 例項化類的詳細介紹

我們定義乙個類後,就必須例項化才給使用。例項化就是建立乙個物件的過程。在c 中,我們使用new運算子關鍵字來建立。類 物件 new 類 即 class object new class 這樣就生成了乙個物件。比如有乙個類叫汽車。你現在想在程式中買一輛,所以你用new來買了一輛汽車,這輛車你得給你找個...