C 中各種型別修飾符彙總

2021-07-04 13:15:53 字數 1852 閱讀 2397

private,protected與public

第一:private, public, protected 訪問標號的訪問範圍。

private:只能由1.該類中的函式、2.其友元函式訪問。

不能被任何其他訪問,該類的物件也不能訪問。

protected:可以被1.該類中的函式、2.子類的函式、以及3.其友元函式訪問。

但不能被該類的物件訪問。

public:可以被1.該類中的函式、2.子類的函式、3.其友元函式訪問,也可以由4.該類的物件訪問。

explicit

c++中, 乙個引數的

建構函式(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個

構造器 ,2 是個預設且隱含的型別轉換操作符。

所以, 有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候

編譯器就自動呼叫這個構造器, 建立乙個aaa的物件。

這樣看起來好象很酷, 很方便。 但在某些情況下(見下面權威的例子), 卻違背了我們(程式設計師)的本意。 這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫,使用, 不能作為型別轉換操作符被隱含的使用。 呵呵, 看來還是光明正大些比較好。

explicit

建構函式的作用

解析:explicit建構函式是用來防止隱式轉換的。請看下面的**:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

classtest1

//普通建構函式

private:

intnum;

};

classtest2

//explicit(顯式)建構函式

private:

intnum;

};

intmain()

test1的

建構函式帶乙個int型的引數,**23行會隱式轉換成呼叫test1的這個建構函式。而test2的建構函式被宣告為explicit(顯式),這表示不能通過隱式轉換來呼叫這個建構函式,因此**24行會出現編譯錯誤。

普通建構函式能夠被

隱式呼叫。而explicit建構函式只能被顯式呼叫。

c 中各種型別轉換

c 中的型別轉換包括隱式型別轉換和顯式型別轉換。隱式型別轉換例如在int與float相加時已經發生,顯示型別轉換主要包括以下四種 1.static cast 主要用於非多型之間的型別檢查。不提供執行時的型別檢查來確保轉換的安全性,因此效率較高。常應用於以下場景 類層次結構中,父類與子類的指標和引用之...

各種型別轉換 C

1.int轉string char buffer 50 int count value total asint sprintf s buffer,d count std string out buffer 2.string轉int std string str 123 int n atoi str....

c 中的各種型別轉換

const cast 去掉const屬性 const int base 1 int b base 編譯錯誤 int b const cast base dynamic cast 只能用於指標和引用的轉換,可以將父類指標轉換成對應的子類指標,但是在向下轉換的時候父類一定要有虛函式,否則會編譯錯誤,如果...