What is a pure virtual function?
A pure virtual function is a function that must be overridden in a derived class and need not be defined. A virtual function is declared to be "pure" using the curious "=0" syntax. For example: class Base {
public:
void f1(); // not virtual
virtual void f2(); // virtual, not pure
virtual void f3() = 0; // pure virtual
};
Base b; // error: pure virtual f3 not overridden
Here, Base is an abstract class (because it has a pure virtual function), so no objects of class Base can be directly created: Base is (explicitly) meant to be a base class. For example:
class Derived : public Base {
// no f1: fine
// no f2: fine, we inherit Base::f2
void f3();
};
Derived d; // ok: Derived::f3 overrides Base::f3
Abstract classes are immensely useful for defining interfaces. In fact, a class with only pure virtual functions is often called an interface.
You can define a pure virtual function:
Base::f3() { /* ... */ }
This is very occasionally useful (to provide some simple common implementation detail for derived classes), but Base::f3() must still be overridden in some derived class.
If you don't override a pure virtual function in a derived class, that derived class becomes abstract:
class D2 : public Base {
// no f1: fine
// no f2: fine, we inherit Base::f2
// no f3: fine, but D2 is therefore still abstract
};
D2 d; // error: pure virtual Base::f3 not overridden
转载自:http://www.research.att.com/~bs/bs_faq2.html#pure-virtual
之 Bjarne Stroustrup's C++ Style and Technique FAQ
本文详细解释了纯虚函数的概念及其用法。纯虚函数是一种必须在派生类中重写但不必定义的函数,它使用特殊的=0语法声明。文章通过示例展示了如何使用纯虚函数创建抽象类,并探讨了它们在定义接口方面的重要作用。
624

被折叠的 条评论
为什么被折叠?



