小白學習,c 基礎(四)

2021-10-04 02:46:51 字數 2038 閱讀 4818

巨集函式(帶引數)的缺點:

第乙個在c中也會出現,巨集看起來像乙個函式呼叫,但是會有隱藏一些難以發現的錯誤。

第二個問題是c++特有的,預處理器不允許訪問類的成員,也就是說預處理器巨集不能用作類的成員函式

內聯函式:內聯函式為了繼承巨集函式的效率,沒有函式呼叫時開銷,然後又可以像普通函式那樣,可以進行引數,返回值型別的安全檢查,又可以作為成員函式

內聯函式:是乙個真正的函式。函式的替換 發生在編譯階段

inline

intmy_mul

(int x,

int y)

void

test01()

1.1任何在類內部定義的函式自動成為內聯函式。

class

person

void

printperson()

};

內聯函式的條件:

1、不能存在任何形式的迴圈語句

2、不能存在過多的條件判斷語句

3、函式體不能過於龐大 不能對函式進行取址操作

c++在宣告函式原型的時可為乙個或者多個引數指定預設(預設)的引數值,當函式呼叫的時候如果沒有傳遞該引數值,編譯器會自動用預設值代替。

/函式的預設引數 指定x的預設值為10 y為20

intmy_add

(int x=10,

int y=20)

void

test02()

注意:

1、函式的預設引數從左向右,如果乙個引數設定了預設引數,那麼這個引數之後的引數都必須設定預設引數

//函式的預設引數從左向右

intfunc01

(int x,

int y=20,

int z=30)

void

test03()

2、如果函式宣告和函式定義分開寫,函式宣告和函式定義不能同時設定預設引數

建議:函式宣告出設定預設引數

fun.cpp

int

func02

(int x,

int y,

int z)

main.cpp

//分檔案 函式定義處的預設引數 是無效的

//建議:分檔案是 在宣告 給預設引數

extern

intfunc02

(int x,

int y=25,

int z=35)

;//extern int func02(int x,int y,int z);//err

void

test04()

函式過載:同乙個函式名在不同場景下可以具有不同的含義。

函式過載意義:方便的使用函式名。

函式過載的條件: 同乙個作用域 引數個數不同 引數型別不同 引數順序不同(重要)

void

myfunc

(int a)

void

myfunc

(int a,

int b)

void

myfunc

(int a,

double b)

void

myfunc

(double a,

int b)

void

test06()

注意:

1、函式的返回值型別不能作為函式過載的依據

2、函式過載和預設引數一起使用,需要注意二義性問題的產生

lass 類名

;

class

person

//抽象的概念};

void

test01()

class預設是私有的 資料私有 方法公有 使用者就可以借助 公有方法 間接的操作 私有資料

小白學習,c 基礎(五)

1 類的空間大小 using namespace std class data intgetnum void void test01 2 成員函式,在類內宣告,類外定義 include using namespace std class data data類的成員函式 void data setnu...

小白學習,c 基礎(七)

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

C 基礎學習四

const修飾成員函式 友元在乙個類中,若將乙個成員變數宣告為static,這種成員稱為靜態成員變數,與一般的資料成員不同,無論建立了多少個物件,都只有乙個靜態資料的拷貝 靜態成員變數,屬於某個類,所有物件共享 靜態變數,在編譯階段就分配空間,物件還沒有建立時,就已經分配空間 靜態成員變數必須在類中...