在基于继承的系统中添加过滤输出的机制
adding a mechanism to filter output in a system based on inheritance
我的问题是关于在面向对象的解决方案中如何做到这一点。我以前在C语言中工作,现在我发现了一些思考对象的困难,我的解决方案是C风格的。问题是:
我们有一个a班,还有很多孩子B、C、D、E班。。。。这些子类中的每一个都计算多个值(一个类可以计算5个值,另一个可以计算10个值…)需要,是为用户添加一个机制,只要求他需要的值,例如,B类计算10个值,用户只能要求3个。这个解决办法必须推广到所有的孩子身上。
我提出的解决方案是c风格的。在类A中添加一个int x和一个指向字符串数组的指针在每个子类中定义由该类计算的值的枚举。在子类构造函数中,我们通过x|=(1<<tous-les-eenum)更新x,指向字符串数组的指针将具有与枚举相同顺序的字符串(例如enum{monday,tuesday},数组将{"monday","tusday"}。并且我在A类中呈现用于激活/去激活值的函数。
你认为,任何人都可以改进什么,或者提出一个更面向对象的解决方案。
感谢
您可以在父类中定义一个虚拟成员函数。"数组下标运算符"似乎适用于获取存储值:
A {
virtual const T& operator[](std::size_t index) const = 0;
};
然后,用户可以要求他们需要的值,孩子们可以以适合他们每个人的方式实现该功能。
CCD_ 1当然是存储在对象中的值的类型。根据类型或使用方式,返回副本可能更合适。
如果所有子级都以相同的方式存储值,例如向量,那么将向量放在A
中并使成员函数非虚拟会更简单。这样,孩子们只需要用计算结果填充向量。
然而,根据描述,我认为根本不需要面向对象的解决方案。纯粹的功能性方法可能要简单得多。您可以拥有函数B
、C
、D
、E
。。。其返回值的向量。
相关文章:
- 在现代 CMake 中添加接口库作为系统
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 即使在多任务处理时,添加用户时间 + 系统时间(来自 shell 的时间命令)是否是一种可靠的措施?
- 如何在文件系统之上添加层?就像OneDrive或Google云端硬盘中的缓存一样
- 如何将向量添加到结构中以创建一个库存系统,在该系统中,我可以仅使用一个结构向系统添加多种不同的葡萄酒
- 如何将用户下载的标头文件添加到系统中默认情况下的标题文件列表
- 添加 boost 文件系统.hpp 无法编译
- C 如何在小数系统中添加两个数字
- 如何使用std::bind向信使系统添加成员回调
- 如何知道何时将新文件添加到 Windows 中的文件系统
- 是否可以在系统库标题中添加Whitespace
- EntityX-获取添加到系统中的新实体
- libclang:添加编译器系统包含路径(Windows中的Python)
- 在基于继承的系统中添加过滤输出的机制
- gdb:在0x2aaaaaaab000添加的符号文件系统提供的 DSO 中找不到可加载的部分
- MFC正在将项添加到系统菜单
- 用户将如何在基于QML的插件系统中添加额外的功能
- C++动态库存系统——添加/删除项目
- 在 Linux 0.01 中添加系统调用以使用 C++ "Semaphore"
- gdb:在添加的符号文件系统提供的编号为0x#的DSO中找不到可加载的节