应该接受不同输入参数的纯虚函数 - 应该如何实现
Pure virtual function that should accept varying input arguments - how should this be implemented?
假设我有一个名为"组件"的基类
class Component
{
public:
virtual void init() = 0;
};
此基类需要派生类来定义"init"函数。但是,此 init 函数声明强制函数不接受任何输入参数。这不是我想要的。
我正在寻找一种方法来强制执行"init"函数,但允许派生类在其接受的参数数量上变化。
根据组件类型,派生类应接受不同数量的输入。
在C++如何实现这一目标?
例子
class DerivedComponent1 : Component
{
void init(int arg1);
};
class DerivedComponent2 : Component
{
void init(int arg1, int arg2);
};
您应该考虑使用switch
语句而不是virtual
限定符来解决此问题。只需选择一个函数定义并选择默认值或零即可绕过对参数的考虑。当你尝试以这种方式编写关于类所做的事情时,很容易感到困惑,所以你的函数必须被完全注释和单元测试。
[编辑澄清:您可以在每个新的派生实例中考虑virtual
限定符,但这不是您提出的问题的解决方案。Constructor
或Destructor
方法必须具有非常具体的效果;否则,对一个类的效果进行质量测试是不切实际的,所以当你需要依赖一个one-size-fits-all constructor
时,只有在编码过程中非常小心,你才能真正达到那个效果】
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 如何自己为我自己的shared_ptr实现实现别名构造函数
- 这个UTF-8实现实现是定义的还是定义良好的
- 我的 PRNG 实现与我尝试复制的实现有何不同?