从基/父数组调用子成员
Calling child member from Base/Parent array?
所以,我有一个基类和一个子类。就像
Class Device
{
double read();
}
Class Relay : Public Device
{
void toggleSwitch();
}
Class Sensor : Public Device
{
int getValue();
}
我有一个数组来存储对象,这样我就可以跟踪它们
Device *devices[10];
devices[0] = new Relay();
devices[1] = new Sensor();
etc…
devices[0]->toggleSwitch(); // error
可以从这些设备中调用成员read(),因为read()在基类中。那么我如何在Relay中调用toggleSwitch()呢?我会得到一个错误说'类设备'没有名为'toggleSwith'的成员。这是有意义的,因为'devices'数组是Device的。那么我如何调用子元素的成员呢?我试过选演员,但效果不理想。谢谢。
另一个解决方案是,当你知道device[i]是一个指向Relay的指针时,只需强制转换它。
((Relay *)devices[i])->toggleSwitch();
虚拟函数的缺点是增加了开销(更多的内存使用和更慢的代码),但是只有当您为类分配大量(数百万)实例时,这才会出现问题。您还需要修改基类(如果它是第三部分代码,您可能不希望这样做)。
您需要使用(纯)虚函数。在基类中,添加以下内容:
virtual void toggleSwitch() = 0;
virtual int getValue() = 0;
以上将导致那些在专门化中实现的虚函数可以通过基类指针调用。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 无法为类成员调用函数
- C++ 类成员调用错误 C3861
- 用const_iterator成员调用类destructor时堆积损坏
- C++ 如何为类的所有成员调用方法
- 通过命名成员调用虚拟与地址或引用的区别
- 使用类成员调用函数
- 正在成员调用中实例化类
- 使用父类中的私有成员调用父构造函数
- 带有类 - 非静态成员调用的 typedef 函数声明
- C++:对非静态成员函数指针的成员调用
- 需要从静态成员调用函数(由静态指针引用)
- 用类成员调用构造函数,c++
- 将luabind派生成员调用为协同程序
- 为什么我没有得到编译错误时,我从const方法内部的ref成员调用非const方法
- 类成员函数正常工作,但当作为另一个类的数据成员调用时陷入无限循环