c++ - 转换到一个类并从兄弟类调用函数?

标签 c++ casting

我得到一个指向基类的指针(实际上是指向某个派生类的指针)。然后我想在那个派生类上调用一个函数,但我不知道它是哪个。

class Base
{

};

class DerivedOne : public Base
{
    public:
        void functionA()
        {   int x = 0;  }
};

class DerivedTwo : public Base
{
    public:
        void functionA()
        {   int x = 0;  }
};

int main()
{   
    Base* derivedTwoPtr = new DerivedTwo();

    reinterpret_cast<DerivedOne*>(derivedTwoPtr)->functionA(); 

    return 0;
}

这如我所愿,但我不得不说它看起来很狡猾。它是定义的行为吗?如果不是,是否有动态解决此问题的合法方法?

最佳答案

嘿,别这样。这就是虚拟方法的用途。

class Base
{
public:
    virtual void functionA()=0;

};

class DerivedOne : public Base
{
    public:
        virtual void functionA()
        {       int x = 0;      }
};

class DerivedTwo : public Base
{
    public:
        virtual void functionA()
        {       int x = 0;      }
};

int main()
{   
    Base* derivedTwoPtr = new DerivedTwo();

    derivedTwoPtr->functionA(); 

    return 0;
}

关于c++ - 转换到一个类并从兄弟类调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518555/

相关文章:

c++ - 如何使用 Qt 类和函数构建 XML 文件并转义所有非 Unicode 字符?

c++ - 将 QString 转换为 char* 不稳定?

c++ - 无效转换导致的堆损坏?

java - 转换引用与使用 new (ArrayList)

c++11 std::array vs 静态数组 vs std::vector

c++ - 迭代速度和元素大小

C++ 串联哎呀

c++ - 如何在 TinyXML2 中将 XMLElement 转换为字符串

types - 将IplImage类型IPL_LABEL转换为IplImage类型IPL_DEPTH_8U

c++ - 将包含 void 指针的一对转换为一对其他类型的指针