Implementazione protocolli di classi
Le classi possono essere implementate per applicare un protocollo. Queste classi sono definite "classi astratte", perché non è possibile creare alcun oggetto del tipo di classe. Esistono esclusivamente per la derivazione.
Le classi sono astratte se contengono o ereditano funzioni virtuali pure e non forniscono un'implementazione per tutte le stesse funzioni virtuali pure. Le funzioni virtuali pure sono funzioni virtuali dichiarate con pure-specifier (= 0), come indicato di seguito:
virtual char *Identify() = 0;
La classe base, Document, può imporre il protocollo seguente a tutte le classi derivate:
Una funzione Identify appropriata deve essere implementata.
Una funzione WhereIs appropriata deve essere implementata.
Se tale protocollo viene specificato durante la progettazione della classe Document, progettazione classi sa che non è possibile implementare alcuna classe non astratta in assenza delle funzioni Identify e WhereIs. La classe Document, pertanto, contiene le dichiarazioni seguenti:
// deriv_ClassProtocolImplementation.cpp
// compile with: /LD
class Document {
public:
// Requirements for derived classes: They must implement
// these functions.
virtual char *Identify() = 0;
virtual char *WhereIs() = 0;
};