深入理解c 成員函式

2021-08-17 23:40:51 字數 2955 閱讀 5659

1、const成員函式:

在成員函式後面加const,const修飾this指標所指向的物件,也就是保證呼叫這個const成員函式的物件在函式內不會被改變

思考以下幾種場景

1. const物件可以呼叫非const成員函式和const成員函式嗎? x

2. 非const物件可以呼叫非const成員函式和const成員函式嗎? 對

3、const成員函式內可以呼叫其它的const成員函式非const成員函式嗎?

前對 後x

4、非const成員函式內可以呼叫其它的const成員函式非const成員函式嗎?對

許可權可以被縮小,但是不可以被放大。const許可權小,非const許可權大

int  a = 10;

int *p1 = &a;//值可以被改變

const

int *p2 = &a;//把a的位址給給p2,通過改變p指向的內容改變值

intconst*p3 = &a;//同上

p1 = p2; //不可以

p2 = p1;//可以 許可權問題

//////

//////

//////

//////

//////

/////

//p1 、p2、p3都可以被改,p4,p5不能被改

int *const p4 = &a;//p4不能被改

const

int* const p5 = &a;//都不能被改

2、inline(內聯)

以inline修飾的函式叫做內聯函式,編譯時c++編譯器會呼叫內聯函式的地方展開,沒有 函式壓棧的開銷,內聯函式提公升程式執行的效率

1. inline是一種以空間換時間的做法,省去呼叫函式額開銷。所以**很長或者有迴圈/遞迴的的函式不適宜使用內聯。

2. inline對於編譯器而言只是乙個建議,編譯器會自動優化,如果定義為inline的函式體內有迴圈/遞迴等等,編譯器優化時會忽略掉 內聯。

3.inline必須函式定義放在一起,才能成為內聯函式,僅將inline放在宣告前是不起不作用的。

4.定義在類內的成員函式預設定義為內聯函式。

問題–c++建議以const/列舉/內聯去替代巨集,為什麼?

巨集優點

1. 增強**的復用性。

2. 提高效能。

巨集也有很多缺點:

1. 不方便除錯巨集。(因為預編譯階段進行了替換)

2. 導致**可讀性差,可維護性差,容易誤用。

3. 沒有型別安全的檢查。

3、友元函式: 在c++中友元函式允許在類外訪問該類中的任何成員,就象成員函式一樣,友元函式用關鍵字friend說明。

1. 友元函式不是類的成員函式。

2. 友元函式可以通過物件訪問所有成員,私有和保護成員也一樣

友元是突破訪問限定符的一種函式

#include

#include

using

namespace

std;

class date

private:

int _a1;

int _a2;

};bool

operator

int main()

友元類也是相同的宣告方法b要訪問a,就必須在a中聲名b;

class time 

;class date

;void test ()

4、static成員函式:

類的靜態成員

1. 類裡面static修飾的成員,成為靜態類成員。

2. 類的靜態成員是該型別的所有物件物件所共享。

注意靜態成員函式沒有隱含this指標引數,所以可以使用型別::作用域訪問符直接呼叫靜態成員函式。

**如下:

1)、靜態成員函式不可以訪問非靜態的成員

2)、 非靜態的成員函式可以訪問靜態成員

5、

test1中呼叫了 _ 次aa的拷貝建構函式 _ 次aa的賦值運算子函式的過載。 test2中呼叫了

次aa的拷貝建構函式,_次aa的賦值運算子函式的過載。 test3中呼叫了次aa的拷貝建構函式,次aa的賦值運算子函式的過載。 class aa {}; aa f (aa a) void test1 () void test2 ()

void test3 ()

答案:

深入理解成員函式指標

include includeusing namespace std class test test void hello private int m i int main hello hello 為何 p null p hello 這樣之後,null hello 也依然有效呢?include in...

深入理解函式

第五章 深入理解函式 1.return語句 有返回值的函式中,return語句的作用式提供整個函式的返回值,並結束當前函式返回到呼叫它的地方。在沒有返回值的函式中也可以使用return語句,例如當前檢查到乙個錯誤時提前結束當前函式的執行並返回 這個函式首先檢查引數x是否大於0,如果x不大於0就列印錯...

C 類函式深入理解

先看一段 class a void print const int main int argc,const char argv 執行結果 a print 0x100000eb0 print enter.this 0x0 a v 1 空指標 那麼問題來了。一般情況下,a null,為空指標,訪問a都是...