Besides the member functions which constitute the C++ language bindings for MPI, the C++ language interface has additional functions (as required by the C++ language). In particular, the C++ language interface must provide a constructor and destructor, an assignment operator, and comparison operators.
The complete set of C++ language bindings for MPI-1 is presented in Annex MPI-1 C++ Language Binding . The bindings take advantage of some important C++ features, such as references and const. Declarations (which apply to all MPI member classes) for construction, destruction, copying, assignment, comparison, and mixed-language operability are also provided. To maintain consistency with what has gone before, the binding definitions are given in the same order as given for the C bindings in [6].
Except where indicated, all non-static member functions (except for constructors and the assignment operator) of MPI member classes are virtual functions.
 
 
 
 Rationale.  
 
Providing virtual member functions is an important part of design  
  for inheritance.  Virtual functions can be bound at run-time, which  
  allows users of libraries to re-define the behavior of objects  
  already contained in a library.  There is a small performance  
  penalty that must be paid (the virtual function must be looked up  
  before it can be called).  However, users concerned about this  
  performance penalty can force compile-time function binding.  
 ( End of rationale.) 
 
 Example  
  Example showing a derived  MPI class.  
 
class foo_comm : public MPI::Intracomm { 
public: 
  void Send(void* buf, int count, const MPI::Datatype& type,  
            int dest, int tag) const  
  { 
    // Class library functionality 
    MPI::Intracomm::Send(buf, count, type, dest, tag); 
    // More class library functionality 
  } 
}; 
 
  
  
 
 
 
 Advice  
        to implementors.  
 
Implementors must be careful to avoid unintended side effects from class  
  libraries that use inheritance, especially in layered  
  implementations.  For example, if  MPI_BCAST is  
  implemented by repeated calls to  MPI_SEND or  
   MPI_RECV, the behavior of  MPI_BCAST cannot be  
  changed by derived communicator classes that might redefine  
   MPI_SEND or  MPI_RECV.  The implementation of  
   MPI_BCAST must explicitly use the  MPI_SEND (or  
   MPI_RECV) of the base  MPI::Comm class.  
 ( End of advice to implementors.)