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來買了一輛汽車,這輛車你得給你找個...