2类之间的继承关系

时间:2019-02-24 07:48:21

标签: c++ inheritance

假设我们有两个类-Y和X。

现在,假设我们有以下代码段:

Y y;
X &x = y;

通过这个标题,我们怎么知道这些类之间存在继承关系?

我们怎么知道类Y继承了类X?

1 个答案:

答案 0 :(得分:0)

检查类之间的“关系”的最常见方法之一是使用dynamic_cast。如果强制转换失败,它将返回nullptr,因此最好使用指针代替引用(要使用它们,您必须检查异常)。

这里是一个例子:

#include <iostream>
#include <memory>

class X
{
public:
    virtual ~X() = default;
    X() = default;
};

class Y : public X
{
public:
    virtual ~Y() = default;
    Y() = default;
};

class Z
{
public:
    virtual ~Z() = default;
    Z() = default;
};

template<class Derived, class Base>
bool isType(Derived *checkedType)
{
    return checkedType != nullptr && dynamic_cast<Base *>(checkedType) != nullptr;
}

int main() {
    std::shared_ptr<Y> y = std::make_shared<Y>();

    if(isType<Y,X>(y.get()))
        std::cout<<"There is relation between 2 classes!\n";
    if(!isType<Y,Z>(y.get()))
        std::cout<<"There is no relation between 2 classes!";
}