小白學習,c 基礎(五)

2021-10-04 03:41:00 字數 2704 閱讀 3558

1、類的空間大小

using

namespace std;

class

data

intgetnum

(void)}

;void

test01()

2、成員函式,在類內宣告,類外定義

#include

using

namespace std;

class

data

;//data類的成員函式

void data::

setnum

(int data)

int data::

getnum()

void

test01()

intmain

(int argc,

char

*ar**)

3、建構函式和析構函式的概述

建構函式和析構函式,這兩個函式將會被編譯器自動呼叫,建構函式完成物件的初始化動作,析構函式在物件結束的時候完成清理工作。

注意:物件的初始化和清理工作是編譯器強制我們要做的事情,即使你不提供初始化操作和清理操作,編譯器也會給你增加預設的操作,只是這個預設初始化操作不會做任何事。

建構函式:例項化物件的時候系統自動呼叫

析構函式:物件釋放的時候系統自動呼叫

3.1、建構函式和析構函式的定義

建構函式語法:

建構函式函式名和類名相同,沒有返回型別,連void都不可以,但可以有引數,可以過載

析構函式語法:

析構函式函式名是在類名前面加」~」組成,沒有返回型別,連void都不可以,不能有引數,不能過載

class

data

//建構函式(有參的構造)

data

(int n)

//析構函式

~data()

};void

test01()

intmain

(int argc,

char

*ar**)

4、建構函式的分類以及呼叫

4.1、建構函式分類:

按引數型別:分為無參建構函式和有參建構函式

按型別分類:普通建構函式和拷貝建構函式(複製建構函式)

4.2、建構函式的呼叫

class

data

//建構函式(有參的構造)

data

(int n)

//析構函式(沒有返回值型別 沒有引數 不能過載)

~data()

};void

test02()

4.3、拷貝建構函式

data

(const data &ob)

//const data &ob = ob1

void

test03()

5、建構函式的呼叫規則

系統會對任何乙個類提供3個函式成員函式:

預設建構函式(空) 預設析構函式(空) 預設拷貝建構函式(淺拷貝)

5.1、如果使用者提供了有參構造 將遮蔽 系統的預設建構函式.

data ob1;

//err

5.2、如果使用者提供了有參構造 不會遮蔽 系統的預設拷貝建構函式。

data ob1(10

);data ob2 = ob1;

ob2.num ==

10

5.3、如果使用者提供了拷貝建構函式 將遮蔽 系統的預設建構函式、預設拷貝建構函式

data ob1;

//err

6、深拷貝和淺拷貝

淺拷貝

class

person

person

(char

*name,

int num)

cout<<

" 已經申請好空間"

(m_name,name)

; m_num = num;

cout<<

"有參構造"

<}person

(const person &ob)

//ob==>lucy

~person()

cout<<

"析構函式"

<}void

showperson

(void)}

;void

test01()

如果類中的成員 指向了堆區空間 一定要記得在析構函式中 釋放該空間

如果使用者 不實現 拷貝構造 系統就會提供預設拷貝構造

而預設拷貝構造 只是單純的賦值 容易造成淺拷貝問題

使用者記得 要實現:無參構造(初始化資料)、有參構造(賦引數)、拷貝構造(深拷貝) 、析構函式(釋放空間)

7、初始化列表

注意:初始化成員列表(引數列表)只能在建構函式使用

class

data

~data()

void

showdata

(void)}

;void

test01()

小白學習,c 基礎(四)

巨集函式 帶引數 的缺點 第乙個在c中也會出現,巨集看起來像乙個函式呼叫,但是會有隱藏一些難以發現的錯誤。第二個問題是c 特有的,預處理器不允許訪問類的成員,也就是說預處理器巨集不能用作類的成員函式 內聯函式 內聯函式為了繼承巨集函式的效率,沒有函式呼叫時開銷,然後又可以像普通函式那樣,可以進行引數...

小白學習,c 基礎(七)

1.1修飾成員函式 用const修飾的成員函式時,const修飾this指標指向的記憶體區域,成員函式體內不可以修改本類中的任何普通成員變數,當成員變數型別符前用mutable修飾時例外。int myfun void const const修飾的是成員函式 函式內部不能修改普通成員變數 mutabl...

C語言基礎學習(五)

注 關於陣列名的乙個通常兩個例外 char arr 10 1 arr 通常情況表示首元素的位址 2 arr 表示整個陣列的位址 sizeof arr 整個陣列占用記憶體空間大小 基位址 變數的位址值 位址包括兩個方面的內容 乙個叫物件大小 乙個是基位址 32位或者64位 指標 用來儲存位址的變數 指...