C++ 子 class 是否与他们自己及其父 class 属于同一类型?
C++ Are child classes of the same type as themselves AND their parent class?
在一个没有使用 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
and/or right
?
我想最后一个问题可能会产生误导,但它仍然取决于第一个问题是否正确,所以如果需要,我会在之后进一步展开。
谢谢!
would cClass instanceof bClass be true?
是
would a function add(baseClass &left, baseClass &right) be able to expect ANY of the baseClass's children as the left and/or 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
我们可以安全地将子 class 对象的引用提供给期望引用基 class 对象的函数,因为基 class 中存在的任何内容都将存在于子 class.
在一个没有使用 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
and/or right
?
我想最后一个问题可能会产生误导,但它仍然取决于第一个问题是否正确,所以如果需要,我会在之后进一步展开。
谢谢!
would cClass instanceof bClass be true?
是
would a function add(baseClass &left, baseClass &right) be able to expect ANY of the baseClass's children as the left and/or 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
我们可以安全地将子 class 对象的引用提供给期望引用基 class 对象的函数,因为基 class 中存在的任何内容都将存在于子 class.