2012-02-22 66 views
2

我偶然發現這個代碼,我很困惑它如何編譯,因爲來自A的函數之一引用靜態B.此外它應該做什麼。需要關於此代碼與多態性的解釋

其中B選自A.

衍生在阿文件中了Bh

static B* instance() { return dynamic_cast<B*>(A::instance()); } 

static A* instance(); 

在B.cpp

A* A::instance() 
{ 
    static B s_instance; 
    return &s_instance; 
} 

類定義並且這樣是省略以減輕代碼。

+0

我不明白這個問題。 – 2012-02-22 15:53:01

回答

1
  • A::instance()給你一個A*指向一個B。始終相同B
  • B::instance()給出A::instance(),dynamic_cast編輯爲B*的結果。

沒有理由導致編譯失敗(除了AB的定義丟失,即)。

+0

有沒有另一種方法來做這種事情? – DogDog 2012-02-22 15:59:30

+0

@Apoc:完全取決於代碼使用這些函數。你想解決什麼問題? – 2012-02-22 16:03:24

+0

有兩種類型的單例,其中一種來自另一種,但只有兩種類型的實例。 – DogDog 2012-02-22 16:06:14