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.
}
}
Однако, чтобы это работало, базовый тип класса должен быть полиморфным (он должен иметь хотя бы виртуальный метод).