2016-07-23 74 views
0

一個學期沒有C++,但大量的Java我現在有很多新的問題。C++是否有與它們自己及其父類相同類型的子類?

鑑於class baseClassclass childClass : public baseClass定義和,讓我們說,(在C++雖然)將cClass instanceof bClasstrue實例baseClass bClass(); childClass cClass();,在Java等效範圍內?

而且,如果是的話(現在多態性),將一個函數add(baseClass &left, baseClass &right)能夠期待任何baseClass的孩子作爲left和/或right的?

我提出的最後一個問題可能會引起誤解,但它仍然取決於第一個問題是否屬實,因此如果需要,我會在此後進一步擴展。

謝謝!

+1

對所有問題的回答是肯定的。 –

回答

3

會cClass instanceof bClass是真的嗎?

將一個函數add(基類&左,基類&右)能夠期待任何的基類的兒童爲左和/或右的?

是的。這被稱爲upcasting(因爲您正在向上移動層次結構)並且是C++中運行時多態性背後的概念。考慮下面的例子

class A 
{ 
public: 
    func() 
    { 
    cout << "A"; 
    } 
}; 

class B : public A 
{ 
public: 
    func() 
    { 
    cout << "B"; 
    } 
}; 

void foo(A &obj) 
{ 
    obj.func(); 
} 

int main() 
{ 
    A a; 
    B b; 

    foo(a); 

    cout << endl; 

    foo(b); 

    return 0; 
} 

輸出:

A 
B 

我們可以安全地提供參考子類對象,以期待基類對象的引用,因爲在基類中的任何存在將在子類中存在的函數。

+0

美麗。用例子直接回答,不可能更清楚。謝謝。 – joaoA

相關問題