从Baseclass获取其他功能
Get additional function from baseclass
我对C 相对较新。我们有一个抽象基类和2个派生类。
class PositionBase (abstract)
class PositionLenght: PositionBase
class PositionAngle: PositionBase
位置基础包含像获取名称一样的功能。派生类具有GetLenght()
或GetAngle();
(旧(应用程序包含一个包含派生类的数组。
假设,我从array[1]
获得对象,并基于其类型,我想运行GetLength() or GetAngle()
。然后,我需要知道我从数组中获得的对象类型。
我使用:
if(PositionBase->IsKindOf(RUNTIME_CLASS(PositionLenght))))
{do something}
它不起作用。什么是
if(typeid(*PositionBase) == typeid(PositionLenght)))
{do something}
我也可以只" dynamic_cast
"对象,如果它不返回null,我很好。
在C#
中,我将使用接口,在C++
中处理此问题的首选方法是什么?
如果我理解,您需要的是:
在C 中,您可以将指针存储为将类派生到基础(摘要(类的一系列指针中。从那里,当您从数组中获取指针以基础的指针时,如果您需要来自派生类的特定功能,比你需要使用Dynamic_cast铸造从基础派生并检查结果,以查看铸造是否成功,以及是否可以调用您需要的功能。
完全相同(与c#中的相同(。您在基类中定义虚拟功能,并在派生类中使用所需功能覆盖它:
class PositionBase {
public:
virtual void do_something() = 0;
};
class PositionLenght: public PositionBase {
void do_something() override {
std::cout << "doing something for lengthn";
}
};
class PositionAngle: public PositionBase {
void do_something() override {
std::cout << "doing something for anglen";
}
};
int main() {
PositionBase *arr[] = {
new PositionLenght(),
new PositionAngle(),
};
for(auto i = 0; i < 2; ++i) arr[i]->do_something();
}
将打印:
doing something for length
doing something for angle
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 如何从其他功能C++访问参数?
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- char* 除了作为C++中的指针之外,还有其他功能吗?
- 如何让线程继续并启动其他功能 - C++使用 OpenMP?
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 如何使用使用代替定义或其他C++功能
- 在 SCIP 中集成来自其他源代码的功能
- 传递多个参数的功能,该函数将类包含到其他函数
- 从Baseclass获取其他功能
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- 如何与 PlaySound 同时执行其他功能?
- 在递归功能中,我如何跳到堆栈上的其他功能调用
- 在Google测试框架中,如何期望函数调用或其他功能调用
- 功能模板与Variadic模板过载:Intel C 编译器版本18产生的结果不同于其他编译器.英特尔是错误的
- 我想制作一个程序来执行一些用户制作的功能,例如加法和其他东西
- 您如何共享Java功能而不提供其他源代码
- 无法从类中的其他功能访问同一类的变量
- 模板功能以映射特定类型,并保留所有其他不变的