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
class
test1
//普通建構函式
private
:
int
num;
};
class
test2
//explicit(顯式)建構函式
private
:
int
num;
};
int
main()
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 只能用於指標和引用的轉換,可以將父類指標轉換成對應的子類指標,但是在向下轉換的時候父類一定要有虛函式,否則會編譯錯誤,如果...