C++如何判断声明为基类的对象,是否某子类型的实例

2024年11月29日 11:51
有1个网友回答
网友(1):

用几个方法,最常用的方法是 dynamic_cast

class Base
{
};

class Test : public Base
{
};

void test(Base* p)
{
    Test* t = dynamic_cast(p);
    if (t != NULL) { // 转换成功,是子类
        ...
    }
}

还有一个方法,自己实现classname的方法,好处是可以降低耦合,高级编程中用的比较多

class Base
{
public:
    virtual std::string getClassName() const 
    {
        return "Base";
    }
};

class Test : public Base
{
public:
    virtual std::string getClassName() const 
    {
        return "Test";
    }
};

void test(Base* p)
{
   if (p->getClassName() == "Test") { // 是Test子类
       ...
   }
}