巨集函式(帶引數)的缺點:
第乙個在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,這種成員稱為靜態成員變數,與一般的資料成員不同,無論建立了多少個物件,都只有乙個靜態資料的拷貝 靜態成員變數,屬於某個類,所有物件共享 靜態變數,在編譯階段就分配空間,物件還沒有建立時,就已經分配空間 靜態成員變數必須在類中...