2016-07-23 37 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

相关问题