在没有C ++但是大量Java的学期之后我现在有很多新问题。
给定class baseClass
和class childClass : public baseClass
定义,并且,比如说,实例baseClass bClass(); childClass cClass();
,在Java等效上下文中(尽管在C ++中)cClass instanceof bClass
将是true
add(baseClass &left, baseClass &right)
?
并且,如果是这样(现在在多态性上),函数baseClass
是否能够将left
个孩子中的任何一个视为right
和/或{ {1}}?
我认为最后一个问题可能会产生误导,但仍然取决于第一个问题是否属实,所以如果需要,我会在之后进一步扩展。
谢谢!
答案 0 :(得分:3)
cClass instanceof bClass是真的吗?
是
函数add(baseClass& left,baseClass& right)能否指望任何baseClass的子元素为left和/或right?
是。这称为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
我们可以安全地向期望引用基类对象的函数提供对子类对象的引用,因为子类中存在的子类将存在于子类中。