Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 默认纯虚拟实现C++;_C++ - Fatal编程技术网

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因为这是需求和定义的接口