C++ 默认纯虚拟实现C++;
可能重复:C++ 默认纯虚拟实现C++;,c++,C++,可能重复: 我有一个基类,它有一个名为time()的函数 我的想法是拥有一个纯虚拟函数,从它继承的所有类都必须实现该函数。 但是,我还想添加默认行为;无论谁调用time()函数,都需要打印“hello”。 可能吗 实现这一目标的最简单方法是采用以下方法: class base { virtual void time_impl()=0; public: void time() { //Default behaviour
我有一个基类,它有一个名为
time()
的函数我的想法是拥有一个纯虚拟函数,从它继承的所有类都必须实现该函数。
但是,我还想添加默认行为;无论谁调用
time()
函数,都需要打印“hello”。
可能吗 实现这一目标的最简单方法是采用以下方法:
class base {
virtual void time_impl()=0;
public:
void time() {
//Default behaviour
std::cout << "Hello\n";
//Call overridden behaviour
time_impl();
}
};
class child : public base {
void time_impl() override {
//Functionality
}
};
类基{
虚拟无效时间_impl()=0;
公众:
无效时间(){
//违约行为
std::cout实现这一目标的最简单方法是拥有以下内容:
class base {
virtual void time_impl()=0;
public:
void time() {
//Default behaviour
std::cout << "Hello\n";
//Call overridden behaviour
time_impl();
}
};
class child : public base {
void time_impl() override {
//Functionality
}
};
类基{
虚拟无效时间_impl()=0;
公众:
无效时间(){
//违约行为
std::cout您可以通过使虚拟
函数不是纯虚拟
来提供基类中的默认行为。
但是,您不能强制实现调用此默认行为,而不对子实现设置一些限制(有关详细信息,请参阅@111111-answer)。您应该检查您的需求,看看这是否是一个可接受的解决方案。您可以在基类中提供默认行为,方法是使您的函数不是纯虚拟的。
但是,您不能强制实现调用此默认行为,而不对子实现设置一些限制(有关详细信息,请参阅@111111-answer)。你应该检查你的需求,看看这是否是一个可接受的解决方案。看看这个我不认为被标记为重复的Q回答了这个Q。看看这个我不认为被标记为重复的Q回答了这个Q。你不妨加一句,这是著名的模板方法设计模式。+1对于C++11-我忘了override
就在那里。编辑:别提第二个问题,谢谢你让我学到了一些新东西!值得注意的是,这迫使孩子同时实现time
和time\u impl
@icepack为什么孩子必须实现时间?@111111因为这是要求,也是你最好添加的定义界面,这是著名的模板方法设计模式。+1 for C++11-我忘了覆盖
在那里。编辑:不用问第二个问题,谢谢你让我学到了一些新东西!值得注意的是,这迫使孩子同时实现时间
和时间
@icepack为什么孩子必须实现时间?@111111因为这是需求和定义的接口