unnamed object的多型只能使用reference (C/C++)

當使用unnamed object且須多型時,只能使用 reference,若用pointer雖可compile,但結果不正確。

以下是使用reference配合unnamed object使用多型,結果正確

 unnamed object的多型只能使用reference (C/C++)
 1 /* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : Polymorphism_UnnameObject_reference.cpp
 5Compiler    : Visual C++ 8.0 / BCB 6.0 / gcc 3.4.2 / ISO C++
 6Description : Demo how to use reference with unnamed object
 7Release     : 04/07/2007 1.0
 8*/

 9 #include  < iostream >
10 #include  < string >
11
12 using   namespace  std;
13
14 class  Base  {
15protected:
16  string text;
17  
18public:
19  Base() {}
20  Base(const char* text) : text(text) {}
21  
22public:
23  virtual string getText() {
24    return "Base's " + this->text;
25  }

26}
;
27
28 class  Derived :  public  Base  {
29public:
30  Derived() {}
31  Derived(const char *text) : Base(text) {}
32  
33public:
34  string getText() {
35    return "Derived's " + this->text;
36  }

37}
;
38
39 int  main()  {
40  Base &obj = Derived("C++");
41  cout << obj.getText() << endl;
42}


執行結果

Derived's C++


但若換成pointer,則結果錯誤

 1 /* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : Polymorphism_UnnameObject_pointer.cpp
 5Compiler    : Visual C++ 8.0 / BCB 6.0 / gcc 3.4.2 / ISO C++
 6Description : Demo how to use pointer with unnamed object
 7Release     : 04/07/2007 1.0
 8*/

 9 #include  < iostream >
10 #include  < string >
11
12 using   namespace  std;
13
14 class  Base  {
15protected:
16  string text;
17  
18public:
19  Base() {}
20  Base(const char* text) : text(text) {}
21  
22public:
23  virtual string getText() {
24    return "Base's " + this->text;
25  }

26}
;
27
28 class  Derived :  public  Base  {
29public:
30  Derived() {}
31  Derived(const char *text) : Base(text) {}
32  
33public:
34  string getText() {
35    return "Derived's " + this->text;
36  }

37}
;
38
39 int  main()  {
40  Base *obj = &Derived("C++");
41  cout << obj->getText() << endl;
42}


執行結果

Derived's


Conclusion
為什麼會如此,我並不清楚,目前只知道unnamed object若要配合多型,一定要用reference,不能用pointer,若有人知道原因請告訴我,謝謝。

你可能感兴趣的:(reference)