使用 dynamic_cast 指向其他派生类对象
using dynamic_cast to point to other derived class object
我有以下情况。有两个基类:Base1,Base2和两个派生类:派生,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 指针指向派生类对象?
提前致谢
您正在引用未初始化的指针ptr
如果我将主要更改为:
int main () {
sysCommandExecutor * sys = new sysCommandExecutor;
sys->ptr=new Derived;
sys->func();
delete dynamic_cast<Derived *>(sys->ptr);
delete sys;
return 0;
}
它有效
您也缺少虚拟 DTOR
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 将基类的成员函数重载到其他派生类C++
- 将派生指针分配给C 中的其他派生类型
- 派生类是否可以查看其他派生类的私有成员?
- 如何将策略模式与派生类中的其他方法一起使用
- 在其他项目的派生类中,在LNK2001中未出现的虚拟函数在LNK2001中产生
- 如果派生类包含其他方法和成员,则可以static_cast从基类到派生类
- 其他命名空间中的派生类
- 使用 dynamic_cast 指向其他派生类对象
- 更改派生类函数的行为,对其他函数的影响最小或没有影响
- C++,许多类派生自一个类,所有派生类都使用从其他东西派生的类,但它们的基使用该分支的基
- 将专用基指针强制转换为专用于其他模板参数的派生指针("adding on"专用化)
- 重写派生类中的某些重载,但不重写其他重载
- 派生结构与指向其他结构的结构