virtual specifier

virtual specifier Polymorphic function specifier or shared base class

function-specifier := virtual

base-modifiers ::= virtual [access-specifier] | access-specifier [virtual]

The virtual keyword has two unrelated uses; it is used in virtual functions and virtual base classes:

  • As a function specifier, virtual can be used only with a nonstatic member function. It makes the function and class polymorphic. A virtual function can be declared with = 0 after the function header, which means the function is abstract. You cannot create an instance of a class with an abstract function; instead, a derived class must override the function. You can create an instance of the derived class.

  • Using virtual as a base-class modifier means the base class subobject is shared when it is used more than once in an inheritance graph.


struct shape {

  virtual void draw(canvas&) = 0;

  virtual void debug(  );


struct square : virtual shape {

  virtual void draw(canvas&);

  virtual void debug(  );


See Also

class, declaration, Chapter 6