A class is made abstract by declaring one or more of its virtual
functions to be “pure.” A pure virtual function is specified by placing “= 0
” in its declaration, as in
virtual void draw() const = 0; // pure virtual function
The “= 0
” is a pure specifier. Pure virtual
functions typically do not provide implementations, though they can. Each concrete derived class must override all base-class pure virtual
functions with concrete implementations of those functions; otherwise, the derived class is also abstract. The difference between a virtual
function and a pure virtual
function is that a virtual
function has an implementation and gives the derived class the option of overriding the function; by contrast, a pure virtual
function does not have an implementation and requires the derived class to override the function for that derived class to be concrete; otherwise the derived class remains abstract.
Pure virtual
functions are used when it does not make sense for the base class to have an implementation of a function, but you want all concrete derived classes to implement the function. Returning to our earlier example of space objects, it does not make sense for the base class SpaceObject
to have an implementation for function draw
(as there is no way to draw a generic space object without having more information about what type of space object is being drawn). An example of a function that would be defined as virtual
(and not pure virtual
) would be one that returns a name for the object. We can name a generic SpaceObject
(for instance, as "space object"
), so a default implementation for this function can be provided, and the function does not need to be pure virtual
. The function is still declared virtual
, however, because it’s expected that derived classes will override this function to provide more specific names for the derived-class objects.
Software Engineering Observation 12.9
An abstract class defines a common public interface for the various classes in a class hierarchy. An abstract class contains one or more pure virtual functions that concrete derived classes must override.
Common Programming Error 12.2
Failure to override a pure virtual function in a derived class makes that class abstract. Attempting to instantiate an object of an abstract class causes a compilation error.
Software Engineering Observation 12.10
An abstract class has at least one pure virtual function. An abstract class also can have data members and concrete functions (including constructors and destructors), which are subject to the normal rules of inheritance by derived classes.
Although we cannot instantiate objects of an abstract base class, we can use the abstract base class to declare pointers and references that can refer to objects of any concrete classes derived from the abstract class. Programs typically use such pointers and references to manipulate derived-class objects polymorphically.
3.12.136.63