(原創) 初學者使用Default Constructor容易犯的錯 (C/C++)

 1/* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : DefaultConstrutor_CommonMistake.cpp
 5Compiler    : Visual C++ 8.0 / ISO C++
 6Description : Common mistake of Default Constructor
 7Release     : 01/14/2007 1.0
 8*/

 9#include <iostream>
10
11using namespace std;
12
13class Foo {
14public:
15  Foo(int x = 0) : x(x) {};
16
17public:
18  int getX() return this->x; }
19
20private:
21  int x;
22}
;
23
24int 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的方式不一樣。

posted on 2007-01-14 11:41  真 OO无双  阅读(878)  评论(0编辑  收藏  举报

导航