類與物件 一

2021-10-24 20:36:24 字數 4764 閱讀 5689

對具體物件進行概括,抽出一類物件的公共性質並加以描述的過程

資料抽象

int hour,int min

行為抽象(功能抽象)

showtime(),settime()

封裝的意義:

公共許可權 public 類內可以訪問 類外可以訪問

保護許可權 protected 類內可以訪問 類外不可以訪問

私有許可權 private 類內可以訪問 類外不可以訪問

c++中提供了類的繼承機制 ,允許程式設計師在原有類特性的基礎上,進行更詳細的說明。

強制多型:將一種資料型別強制轉換成另一種型別的資料來實現——資料型別轉換

過載多型:將同乙個名字賦予不同的含義 ——函式過載

型別引數化多型

包含多型

返回值型別 類名::函式成員名(參數列)

例如:

void clock::

settime

(int h,

int m,

int s)

//限定函式在clock類::區域限制符

void clock::

showtime()

在類的成員函式中,即可以訪問目的物件的私有成員,又可以訪問當前類的其他物件的私有成員

類成員函式的預設值,一定要寫在類的定義中,而不能寫在類定義之外的函式實現中。

物件名.函式成員名(參數列)

例如:

myclock.showtime() //myclock為這一呼叫過程中的目的物件
在c++中 struct和class唯一的區別就在於預設的訪問許可權不同

區別:總結:更像是一種資料結構集合的話,那麼用struct。更像是一種物件的話,那麼用class,c++中引入結構體是為了保持和c程式的相容性。

參考:

優點1:將所有成員屬性設定為私有,可以自己控制讀寫許可權

優點2:對於寫許可權,我們可以檢測資料的有效性

c++利用了建構函式和析構函式解決上述問題,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。

物件的初始化和清理工作是編譯器強制要我們做的事情,因此如果我們不提供構造和析構,編譯器會提供

編譯器提供的建構函式和析構函式是空實現

建構函式:主要作用在於建立物件時為物件的成員屬性賦值,建構函式由編譯器自動呼叫,無須手動呼叫。

析構函式:主要作用在於物件銷毀前系統自動呼叫,執行一些清理工作。

建構函式語法:類名(){}

1.建構函式,沒有返回值也不寫void

2.函式名稱與類名相同

3.建構函式可以有引數,因此可以發生過載

4.程式在呼叫物件時候會自動呼叫構造,無須手動呼叫,而且只會呼叫一次

析構函式語法: ~類名(){}

1.析構函式,沒有返回值也不寫void

2.函式名稱與類名相同,在名稱前加上符號 ~

3.析構函式不可以有引數,因此不可以發生過載

4.程式在物件銷毀前會自動呼叫析構,無須手動呼叫,而且只會呼叫一次

class

person

//析構函式

~person()

};void

test01()

intmain()

兩種分類方式:

按照引數分為:有參構造和無參構造(預設構造)

按照型別分為:普通構造和拷貝構造

三種呼叫方式:括號法、顯示法、隱式轉換法

class

person

//有參建構函式

person

(int a)

//拷貝建構函式

person

(const person& p)

//析構函式

~person()

public

:int age;};

//2、建構函式的呼叫

//呼叫無參建構函式

void

test01()

//呼叫有參的建構函式

void

test02()

intmain()

c++中拷貝構造函式呼叫時機通常有三種情況

使用乙個已經建立完畢的物件來初始化乙個新物件

值傳遞的方式給函式引數傳值

以值方式返回區域性物件

class

person

person

(int age)

person

(const person& p)

//析構函式在釋放記憶體之前呼叫

~person()

int mage;};

//1. 使用乙個已經建立完畢的物件來初始化乙個新物件

void

test01()

//2. 值傳遞的方式給函式引數傳值

//相當於person p1 = p;

void

dowork

(person p1)

void

test02()

//3. 以值方式返回區域性物件

person dowork2()

void

test03()

intmain()

預設情況下,c++編譯器至少給乙個類新增6個函式

構造函式呼叫規則如下:

class

person

//有參建構函式

person

(int a)

//拷貝建構函式

person

(const person& p)

//析構函式

~person()

public

:int age;};

void

test01()

void

test02()

intmain()

淺拷貝只是對指標的拷貝,拷貝後兩個指標指向同乙個記憶體空間,深拷貝不但對指標進行拷貝,而且對指標指向的內容進行拷貝,經深拷貝後的指標是指向兩個不同位址的指標。

class

person

//有參建構函式

person

(int age ,

int height)

//拷貝建構函式

person

(const person& p)

//析構函式

~person()

}public

:int m_age;

int* m_height;};

void

test01()

intmain()

如果屬性有在堆區開闢的,一定要自己提供構造拷貝函式,防止淺拷貝帶來的問題。

語法:建構函式():屬性1(值1),屬性2(值2)… {}

class

person

//初始化列表方式初始化

person

(int a,

int b,

int c)

:m_a

(a),

m_b(b)

,m_c

(c)void

printperson()

private

:int m_a;

int m_b;

int m_c;};

intmain()

c++類中的成員可以是另乙個類的物件,我們稱該成員為 物件成員

class

phone

~phone()

string m_phonename;};

class

person

~person()

void

playgame()

string m_name;

phone m_phone;};

void

test01()

intmain()

靜態成員就是在成員變數和成員函式前加上關鍵字static,稱為靜態成員

靜態成員分為:

靜態成員變數

所有物件共享同乙份資料

在編譯階段分配記憶體

類內宣告,類外初始化

靜態成員函式

所有物件共享同乙個函式

靜態成員函式只能訪問靜態成員變數

class

person};

int person::m_a =10;

//靜態成員變數在類外必須進行宣告

void

test01()

intmain()

類與物件(一)

類和物件 類是具有相同特徵和行為的物件的抽象定義,客觀存在的具體事物都是物件,物件是類的例項 舉個栗子,車是個類,具體的車 寶馬,賓士等等屬於類的例項是物件,特徵 外觀,效能,高度等等屬於字段屬性,行為 轉向,倒車等等屬於方法 類的定義 舉個栗子,乙個遊戲裡是不是有很多boss,這些boss就具有一...

類與物件(一)

public class actor public void performs 宣告並例項化物件 類名稱 物件名稱 new 類名稱 new為分配空間使用 例項化產生物件後可以進行類的操作 物件.屬性 呼叫類中的屬性 物件.方法 呼叫類中的方法j a中this可以完成三件事 封裝是將類的狀態資訊隱藏在...

C 類與物件 一

class date private int day int month 檔案 class date 檔案 include date.h void date showinfo class person private char name int age void test class a priva...