抽象类和纯方法C ++

时间:2015-05-31 18:38:39

标签: c++ inheritance abstract-class abstraction abstract-methods

我读过一本书Stephen Prata - " C ++ Primer Plus VI Edition"在抽象类中,我可以编写纯方法的定义。我知道我可以编写例如void pure() = 0然后我可以在这个类中定义该方法。我认为= 0只是为了使这个类抽象化,如果我创建另一个继承自该类的类,我不必覆盖它(我不知道是否有#34;覆盖& #34;是对的,我的意思是我不想通过在辅助类中编写一个同名的方法来隐藏基本类中的方法。

我在编译器中检查了它,我得到警告"它没有覆盖"。因此,如果我必须在辅助类中覆盖这个纯虚方法(在抽象类中使用定义),我如何在基类中使用这个定义?它没用吗?

3 个答案:

答案 0 :(得分:1)

你在寻找这样的东西:

class Abstract {
public:
  virtual void f() = 0;
};

// A pure virtual function can still be defined.
// It has to be defined out-of-class.
void Abstract::f() {
  // Do something
}

class Concrete : public Abstract {
public:
  void f() {
    Abstract::f();  // call base class implementation
    // Do something more
  }
};

答案 1 :(得分:1)

这是一个解释纯函数概念的例子

feedkeys()

程序输出

function! InsertImport()
    call feedkeys("iimport \<C-R>=CompleteImport()\<CR>", 't')
endfunction
nnoremap <Leader>ji :call InsertImport()<CR>

在这个示例中,类A和B是抽象的,因为它们具有纯虚函数,尽管它们中的每一个都提供了其纯虚函数的相应定义。

只有C类不是抽象的,因为它将虚函数重新声明为非纯虚函数。

答案 2 :(得分:0)

如果要实例化继承的类,即创建此类型的对象,则必须在继承的类中实现所有纯虚方法。

换句话说,纯虚方法不仅定义了类接口,还强迫您提供实际的实现。