【发布时间】:2019-05-14 04:19:44
【问题描述】:
我已经在基类中声明了一个纯虚方法,但我想让不同派生类中的参数集有所不同。
我当前的代码是重载基类中的函数,如下所示:
class Base {
protected:
virtual void function(arg_set_first) = 0;
virtual void function(arg_set_second) = 0;
}
class Derived_First: public Base {
private:
void function(arg_set_first);
void function(arg_set_second) { } // do nothing
}
class Derived_Second: public Base {
private:
void function(arg_set_first) { } // do nothing
void function(arg_set_second);
}
它可以工作,但我认为它很难看,因为每个派生类中都有冗余实现。我想删除它们。
如何将基类中的纯虚函数更改为具有可变参数集,这些参数将在实现时指定?有办法吗?
【问题讨论】:
-
"我在基类中声明了一个纯虚方法" 不,你没有。您已经声明了 两个 纯虚方法。函数不仅仅是 C++ 中的名称。
-
在基类中,不要将它们声明为纯虚拟。为他们提供无所事事的实现。
-
@Eljay 谢谢,我刚刚在 Base 类中将它们更改为具有空主体的虚函数。它可以正常工作,但我不确定这是一个“好”的设计..
-
构成“好设计”的东西是罐头虫。我在这方面有强烈的意见,但我认为我的意见不符合 SO 的格式。 ;-)
-
这个“有效”是什么意思?给定
Base指针/引用的客户会乐意让其中一种或另一种方法不执行任何操作,具体取决于它是哪种派生类型?
标签: c++ inheritance design-patterns