【发布时间】:2012-08-12 15:18:46
【问题描述】:
我有以下情况。有两个基类:Base1、Base2 和两个派生类:Derived、sysCommandExecutor,派生如下:
#include <iostream>
using namespace std;
class Base1 { virtual void dummy() {} };
class Base2 { virtual void dumy() {} };
class Derived: virtual public Base1, public Base2
{ int a; };
class sysCommandExecutor : public Base2
{
public:
int b;
Base1 *ptr;
void func(void);
};
void sysCommandExecutor::func(void)
{
Derived *d;
d = dynamic_cast<Derived *>(ptr);
if (d == NULL)
std::cout << "This is NULL" << std::endl;
else
{
// Call a function of Derived class
}
}
int main () {
try {
sysCommandExecutor * sys = new sysCommandExecutor;
sys->func();
return 0;
}
}
我想在 func 中调用“派生”类的这个函数,但 dynamic_cast 失败。 我无法在 sysCommandExecutor 类中创建该函数,因为那是其他人的代码。 如何让sysCommandExecutor类中的ptr指针指向Derived类对象??
提前致谢
【问题讨论】:
-
ptr 分配了什么?在您的代码中,它是一个未初始化的指针
-
代码看起来很奇怪。似乎没有正确使用多态性。你有一个指向同一个实例的派生类指针。
-
codepad.org/f65rqtYq
No errors or program output. -
1) Derived 中没有方法。 2)
ptr未初始化。 3)这里不需要new(更不用说泄漏了)。 -
另外,请注意设计缺陷,因为
Base1 *ptr不一定引用Derived对象。通常多态性会在相反的方向起作用,Derived* d将转换为Base1 *或Base2*,而不是相反。考虑一下,所有雪佛兰都是汽车,但并非所有汽车都是雪佛兰。您可能正在尝试将福特换成雪佛兰。
标签: c++ oop dynamic-cast