1 /**//*
2 (C) OOMusou 2007
4 Filename : DefaultConstrutor_CommonMistake.cpp
5 Compiler : Visual C++ 8.0 / ISO C++
6 Description : Common mistake of Default Constructor
7 Release : 01/14/2007 1.0
8 */
9 #include <iostream>
10
11 using namespace std;
12
13 class Foo {
14 public:
15 Foo(int x = 0) : x(x) {};
16
17 public:
18 int getX() { return this->x; }
19
20 private:
21 int x;
22 };
23
24 in t main() {
25 Foo foo(2);
26 // Foo foo(); // error!!
27 // Foo foo; // OK!!
28 // Foo foo = Foo(); // OK!!
29
30 cout << foo.getX() << endl;
31 }
25行若想帶2為初始值給Constructor,Foo foo(2)是對的,若不想帶值呢?26行的寫法是常犯的錯,Compiler會認為foo為一function,回傳Foo型別object,這算是C++蠻tricky的地方,所以正確的寫法是27行,不加上(),或28行寫法也可以,先利用Default Constructor建立一個temporary object,再使用Copy Constructor將object copy給foo,不過這是使用Copy-initialization的方式,和27行使用Direct-initialization的方式不一樣。