C 學習 類與物件

2021-09-18 08:14:40 字數 2884 閱讀 5187

類 就是描述一類問題的共同屬性和行為。(共同的,是吧,用個類,就方便使用。屬性,一般就是引數咯,行為,一般就是函式噻),他是抽象的,就像「時鐘」,只是一種概念,不佔儲存空間,在定義類時,不能初始化。

物件呢,就是類 例項化的一種實體,比如我面前這個時鐘(引數被賦值,這裡多大什麼顏色的時鐘)

比如,我建立乙個類:

class people

void clock::showtime()

;clock c1=這樣就完成了初始化,然而許多class的資料成員是private的,就需要利用建構函式進行初始化;

建構函式的性質:

1. 名字與類名相同;

2.沒有返回型別,void也沒有,不返回任何值

3. 建構函式由系統自動呼叫,不用使用者呼叫;

4. 一般來說,建構函式的訪問許可權為public, 特殊情況下也可以為其他訪問許可權;

5.建構函式具有成員函式的所有屬性,包括 可以過載;可以設定預設形參預設值;

【注意,因為過載與可以設定預設形參值,可能造成二義性】

class clock

;clock::clock() //建構函式1

clock::clock(int newh, int newm, int news)//建構函式2

//clock::clock(int newh=0, int newm=0, int news=0)//建構函式2,可以設定預設值

clock c1; //c1物件呼叫建構函式1

clock c2(12,0,0); //c2物件呼叫建構函式2

//這裡利用了其過載特徵,所以可以寫兩個建構函式,根據輸入的引數情況,自動識別並初始化

如上,在有預設值的時候,你寫clock c1; 程式就無法識別是哪乙個建構函式了,從而造成了二義性。

#include using namespace std;

class clock

;private:

int hour, minute, second;

};clock::clock() //建構函式1

clock::clock(int newh, int newm, int news)//建構函式2

//clock::clock(int newh=0, int newm=0, int news=0)//建構函式2,可以設定預設值

void main()

;

當你想複製其中的建構函式初始化,直接用  clock c3(c2)就可以了。因為其c++內部有定義這樣乙個複製建構函式的形式的。

class clock

clock::clock()

clock::clock(clock &c)

//意思就是說這個複製建構函式不寫也可以

下一步,就來到了和建構函式(constructor)對應的析構函式(destructor)

不使用new建立物件時,物件的記憶體空間是在棧中的,其作用範圍只是在函式內部,函式執行完成後就會呼叫析構函式,刪除該物件。[參考博文:

使用new建立物件是建立在堆中的,必須要程式設計師手動的去管理該物件的記憶體空間。

建構函式的性質,除了一般成員函式的性質外,還有:

1. 名字必須與類名相同,前面加「~」構成

2. 沒有返回型別,包括void,不返回任何值

3. 系統自動呼叫,不需使用者呼叫;

4. 訪問許可權為:public

5. 沒有形參,不接受任何引數,因此不能過載。

#include using namespace std;

class clock

;private:

int hour, minute, second;

};clock::clock() //建構函式1

clock::clock(int newh, int newm, int news)//建構函式2

//clock::clock(int newh=0, int newm=0, int news=0)//建構函式2,可以設定預設值

clock::~clock()

int main()

//這裡為什麼要加入大括號呢?因為這樣大括號之後,就會刪除c1等物件,刪除物件之前就會執行析構函式,我們就可以看到析構函式的效果,輸出。若沒有大括號,sytem("pause")在那,沒執行完,是不會執行析構的。

大括號限制作用域。 在大括號內宣告的區域性變數其作用域自變數宣告開始,到大括號之後終結。

好了,本來c++本來自己也會刪除這些物件的,那麼析構函式我們拿來有什麼用呢?

那麼就要利用析構函式的一條重要性質了:類的析構函式在物件被刪除之前自動呼叫。

應用:因此,可以把一些程式的結束清理性工作放在析構函式裡(比如,軟體結束時,資料庫的關閉,伺服器的斷開等)

關於程式的執行順序,我們一般認為是從main()開始

可以看出,最先執行的,其實是main函式外的靜態區初始化,全域性變數。

C 學習(一) 類與物件

大二時學校開過物件導向程式設計 c 語言 的課,使用的是清華大學出版社,李愛華 程磊主編的教材。近兩年在學習和專案中一直使用c,對於c 已經忘記得差不多了。如今大四畢業之際開始學習qt開發上位機,需要用到c 使用原教材再次學習一次。類與物件是c 中兩個基本的概念。可以理解類是資料型別,物件是類定義的...

C 學習總結(函式 類與物件)

前言 時間過的好快,轉眼一學期就過去了,期末考試也快到了,所以就複習一遍同時也將自己學習的感悟總結下來。前面幾章大多與c語言相似,就不總結了。第三章 函式 引數傳遞 include using namespace std void swap int a,int b intmain 輸出結果 x 5 ...

C 學習筆記03 類與物件

公有 私有 保護成員 在關鍵字public後面宣告,它們是類與外部的介面,任何外部函式都可以訪問公有型別資料和函式 在關鍵字private後面宣告,只允許本類中的函式訪問,而類外部的任何函式都不能訪問 在關鍵字protected後面宣告,與private類似,其差別表現在繼承與派生時對派生類的影響不...