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