在派生类中为抽象类函数传递附加参数
Pass additional arguments in derived class for an abstract class function
假设给了我一个抽象类
class A
{
public:
A(){};
virtual ~A(){};
virtual float func(const int in1, const int in2, const int in3) = 0;
//
// Some default useful functions
//
private:
//
// Some infrastructure code
//
};
在大多数情况下,它工作得很好
class A1 : public A
{
public:
A1(){};
virtual ~A1(){};
virtual float func(const int in1, const int in2, const int in3)
{
// Do something to in1, in2, in3 to get output
}
};
但是对于A20,我需要传递一个额外的参数来使函数工作,但我仍然想使用这个抽象类,因为除了这个额外的参数之外,其他一切都是相似的。我能想到的唯一方法是通过构造函数传递参数并存储一个副本。这项工作是否被视为良好做法?
class A20 : public A
{
public:
A20(const int in4) : m_in4(in4){};
virtual ~A20(){};
virtual float func(const int in1, const int in2, const int in3)
{
// Do something to in1, in2, in3, m_in4 to get output
}
private:
int m_in4;
};
如果没有,最好的方法是什么?为函数复制另一个具有4个输入的抽象类更好吗?还是让A20独立于A,并将A中的"一些默认有用功能"answers"一些基础设施代码"复制到A20中更好?
编辑:paddy的评论
我认为一种方法是在基类A中添加一个额外的可选参数。
class A
{
public:
A(){};
virtual ~A(){};
virtual float func(const int in1, const int in2, const int in3, int 4 = some_def_value) = 0;
//
// Some default useful functions
//
private:
//
// Some infrastructure code
//
您应该保持此默认值的一致性,而不是在类A20的重写函数中重写它。
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++ 具有 2 个模板参数的类,具有 1 个参数的函数
- 构造函数中定义的类函数的默认参数
- 尝试将函数从类传递到可变参数模板函数
- 如何在派生类中正确覆盖具有不同参数的函数?
- 在子类函数覆盖中省略具有默认值的参数
- 限制多模板参数朋友函数可访问的类实例的范围
- 当C++类函数参数之一是结构时,它们的语法有什么不同
- 如何将模板友元函数声明为可变参数类
- 如何根据参数化类型的特定成员的类型对模板类函数进行不同的实现
- 为什么不能将std :: async用于接收对抽象类作为参数的函数
- 命名空间和类中的可变参数模板函数
- 子类化 std::thread:构造器中可变参数模板函数的问题
- 使用可变参数模板函数在类周围实现基于 pImpl 的包装器
- 可变参数类模板和继承 - 默认编译器生成的构造函数
- 可变参数类模板和可变参数构造函数
- 子类作为模板模板基类的模板参数,而该类别又是子类函数参数
- 如何在类(C )中作为参数传递函数
- 演绎指南和具有可变参数模板构造函数的可变参数类模板 - 参数包长度不匹配
- 将具有可选模板类型参数的函数传递给类构造函数并将其分配给方法