1、const成員函式:
在成員函式後面加const,const修飾this指標所指向的物件,也就是保證呼叫這個const成員函式的物件在函式內不會被改變
思考以下幾種場景許可權可以被縮小,但是不可以被放大。const許可權小,非const許可權大1. const物件可以呼叫非const成員函式和const成員函式嗎? x
2. 非const物件可以呼叫非const成員函式和const成員函式嗎? 對
3、const成員函式內可以呼叫其它的const成員函式非const成員函式嗎?
前對 後x
4、非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/列舉/內聯去替代巨集,為什麼?
巨集的優點:3、友元函式: 在c++中友元函式允許在類外訪問該類中的任何成員,就象成員函式一樣,友元函式用關鍵字friend說明。1. 增強**的復用性。
2. 提高效能。
巨集也有很多缺點:
1. 不方便除錯巨集。(因為預編譯階段進行了替換)
2. 導致**可讀性差,可維護性差,容易誤用。
3. 沒有型別安全的檢查。
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都是...