所以一般有
class A { ... };
class B { ... };
class C: public A, public B {}; // C inherits from A and B.
当我们创建 C 的实例并想将其传递给某个函数时,我们如何检查传递给函数的类是否扩展了 A?
最佳答案
C
被定义为继承自 A
所以不需要检查:
C
的实例是强制性的也是一个A
(和一个 B
)。
但是,如果你有一个接受 A
的函数作为参数,您可以使用 dynamic_cast<>
检查实例是否真的是 C
:
void function(const A& a)
{
const C* c = dynamic_cast<const C*>(&a);
if (c)
{
// a is an instance of C and you can use c to call methods of C
} else
{
// a is not an instance of C.
}
}
然而,要使其工作,基类类型必须是多态(它必须至少有一个虚拟方法)。
关于c++ - 如何检查一个 C++ 类是否扩展了另一个类(比如另一个类是否是一个接口(interface))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704982/