教你如何new一個物件
- 1 別急,先來了解你的物件
- 2 類之初體驗
- 2.1 類的訪問限定符
- 2.2 認識封裝
- 2.3 類的作用域
- 3 來了,請創建你的物件
- 4.類物件模型
- 5 this指標
什么?你告訴我你還沒物件?那還等什么,還不跟我一起new一個,

1 別急,先來了解你的物件
C語言是面向程序的,關注的是程序,分析出求解問題的步驟,通過函式呼叫逐步解決問題,
C++是基于面向物件的,關注的是物件,將一件事情拆分成不同的物件,靠物件之間的互動完成
舉個洗衣服的栗子:
如果是面向程序:1.打開洗衣機 2.把洗衣液和衣服放進洗衣機 3.選擇模式 4.啟動洗衣機
如果是面向物件:我們只需要呼叫洗衣機這個物件即可完成,洗衣機具體是怎么實作洗衣服程序的我們不必關心,
因為從打開洗衣機到啟動洗衣機的整個流程都是對洗衣機的操作,是洗衣機的行為,洗衣機就是一個物件,所以只要操作洗衣機所具備的功能,都要定義在洗衣機中,
面向物件的概念:
1.面向物件是思考問題的一種思考方式,是一種思想,比如:概念與實體,理論與實踐,名和實等等,,
2.類就是一類物件的統稱,物件就是這一類具體化的一個實體,
3.面向物件的好處:將復雜的事情變簡單了,只要面對一個物件就行,
面向物件設計:
面向物件設計把握一個重要的經驗:誰擁有資料,誰對外提供操作這些資料(私有)的方法! (被動的一方是資料的擁有者,主動的一方是執行者)
開發時:找物件,建物件,用物件,并維護物件之間的關系,
總之,面向物件就是用代碼(類)來描述客觀世界的事物的一種方式. 一個類主要包含一個事物的屬性和行為

2 類之初體驗
C語言中,結構體中只能定義變數,在C++中,結構體內不僅可以定義變數,也可以定義函式,
class className
{
// 類體:由成員函式和成員變陣列成
}; // 一定要注意后面的分號
class為定義類的關鍵字,ClassName為類的名字,{}中為類的主體,注意類定義結束時后面分號,類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數; 類中的函式稱為類的方法或者成員函式,類的兩種定義方式:
- 宣告和定義全部放在類體中,需要注意:成員函式如果在類中定義,編譯器可能會將其當成行內函式處理
#include <iostream>
using namespace std;
class Person
{
public:
void show()
{
cout << "成員函式" << endl;
}
private:
int _age;
char* _name;
char* _sex;
};
- 宣告放在.h檔案中,類的定義放在.cpp檔案中

一般情況下,更期望采用第二種方式,
2.1 類的訪問限定符
【訪問限定符說明】
- public修飾的成員在類外可以直接被訪問
- protected和private修飾的成員在類外不能直接被訪問(此處protected和private是類似的)
- 訪問權限作用域從該訪問限定符出現的位置開始直到下一個訪問限定符出現時為止
- class的默認訪問權限為private,struct為public(因為struct要兼容C)
注意:訪問限定符只在編譯時有用,當資料映射到記憶體后,沒有任何訪問限定符上的區別
2.2 認識封裝
C++實作封裝的方式:用類將物件的屬性與方法結合在一塊,讓物件更加完善,通過訪問權限選擇性的將其介面提供給外部的用戶使用,
封裝:將資料和操作資料的方法進行有機結合,隱藏物件的屬性和實作細節,僅對外公開介面來和物件進行互動,
封裝本質上是一種管理:我們如何管理兵馬俑呢?比如如果什么都不管,兵馬俑就被隨意破壞了,那么我們首先建了一座房子把兵馬俑給封裝起來,但是我們目的全封裝起來,不讓別人看,所以我們開放了售票通道,可以買票突破封裝在合理的監管機制下進去參觀,類也是一樣,我們使用類資料和方法都封裝到一下,不想給別人看到的,我們使用protected/private把成員封裝起來,開放一些共有的成員函式對成員合理的訪問,所以封裝本質是一種管理,
2.3 類的作用域
類定義了一個新的作用域,類的所有成員都在類的作用域中,在類體外定義成員,需要使用 :: 作用域決議符指明成員屬于哪個類域,
class Person
{
public:
void show();
private:
int _age;
char* _name;
char* _sex;
};
//在類外定義類內的函式要加作用域決議符
void Person::show()
{
cout << "成員函式" << endl;
}
3 來了,請創建你的物件

用型別別創建物件的程序,稱為類的實體化
- 類只是一個模型一樣的東西,限定了類有哪些成員,定義出一個類并沒有分配實際的記憶體空間來存盤它
- 一個類可以實體化出多個物件,實體化出的物件 占用實際的物理空間,存盤類成員變數
- 做個比方,類實體化出物件就像現實中使用建筑設計圖建造出房子,類就像是設計圖,只設計出需要什么東西,但是并沒有物體的建筑存在,同樣類也只是一個設計,實體化出的物件才能實際存盤資料,占用物理空間

class Person
{
public:
void show()
{
cout << "物件" << endl;
}
private:
int _age;
char* _name;
char* _sex;
};
int main()
{
Person p; //創建了一個物件p
p.show(); //物件可以呼叫類里面的成員
return 0;
}

4.類物件模型
物件只保存成員變數,成員函式存放在公共的代碼段


5 this指標

- this指標的型別:型別別* const
- 只能在“成員函式”的內部使用
- this指標本質上其實是一個成員函式的形參,是物件呼叫成員函式時,將物件地址作為實參傳遞給this形參,所以物件中不存盤this指標,
- this指標是成員函式第一個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要用戶傳遞
我們來看下面一段代碼了解this指標:
class Person
{
public:
void Display()
{
cout << _age << endl;
}
private:
int _age;
char* _name;
char* _sex;
};
void Display()函式看似沒有形參,但是其實傳了this*指標來,以便訪問類內成員變數,編譯器會處理隱含的this指標
void Display(Person* this)
{
cout << this->_age << endl;
}
好了,本文就總結到這,相信你對面向物件和類都有了基本的認識,后面會還會繼續詳細介紹,各位看官如果覺得文章寫的可以,不妨點個贊再走,如果想一起交流學習經驗,不妨點個關注,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/287431.html
標籤:其他
上一篇:DHT協議介紹
