explicit構(gòu)造函數(shù)和非explicit構(gòu)造函數(shù)
1 #include
2 using namespace std;
3
4 class Base{
5 public:
6 explicit Base(int i=0):ival(i)
7 {
8 cout << "Class Base's constructure is called" << endl;
9 }
10 Base(const Base& b)
11 {
12 cout << "Class Base's copy constructure is called" << endl;
13 }
14 private:
15 int ival;
16 };
17
18 class Base1{
19 public:
20 Base1(int ival): mybase(ival)
21 {
22 cout << "Base1's constructure is called" << endl;
23 }
24 private:
25 Base mybase;
26 };
27
28 void fun(Base b)
29 {
30 cout << "fun is OK" << endl;
31 }
32
33 void main()
34 {
35 int val = 5;
36 Base1 base1(val);
37 cout << endl;
38 fun(Base(val));
39
40 int ival;
41 cin >> ival;
42 }
Base1的構(gòu)造函數(shù)的成員初始化列表中,調(diào)用的是explicit的構(gòu)造函數(shù),注意不是copy構(gòu)造函數(shù)。
如果Base的構(gòu)造函數(shù)不聲明為explicit,若想以int類型實參調(diào)用fun函數(shù),則fun的形參必須為Base對象,為Base&則錯誤。
如果Base的構(gòu)造函數(shù)為explicit,不可用int形參調(diào)用fun(Base b)。
相關(guān)推薦:2010年3月計算機等級考試二級C++筆試試題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |