2013-08-15 1 views
0

Voici la stat et mettre en œuvre:de LevelDB Pourquoi mettre en œuvre db_impl.cc fonction virtuelle pure "DB :: Supprimer"

stat: virtual Status Delete(const WriteOptions& options, const Slice& key) = 0;

mettre en œuvre: Status DB::Delete(const WriteOptions& opt, const Slice& key) { WriteBatch batch; batch.Delete(key); return Write(opt, &batch); }

+0

fonctions virtuelles pures sont utilisées pour faire des classes abstraites qui le mandat d'une interface. –

+0

La suppression dans la classe de base peut être incomplète. L'implémentation fournit tout ce que la classe de base peut faire, cependant. Une classe dérivée devrait donc appeler Base :: Delete. Sans une documentation appropriée, les programmeurs pourraient manquer cela. –

+0

Mais la fonction Delete dans la classe de base est une fonction virtuelle pure. Cela ne peut pas être impoli. – yancey

Répondre

0

La suppression dans la classe de base pourrait être incomplète. L'implémentation fournit tout ce que la classe de base peut faire, cependant. Une classe dérivée devrait donc appeler Base :: Delete. Sans une documentation appropriée, les programmeurs pourraient manquer cela.

Dans la norme 10.3: "Une fonction virtuelle déclarée dans une classe doit être définie, ou déclarée pure (10.4) dans cette classe, ou les deux;"

Cette compile (g ++ std = C++ 11 test.cc essai -o) et fonctionne avec bonheur:

#include <iostream> 
struct X { virtual void f() = 0; }; 
struct Y : X { virtual void f(); }; 
void X::f() { std::cout << 'X' << std::endl;} 
void Y::f() { X::f(); std::cout << 'Y' << std::endl;} 
int main() { 
    Y y; 
    y.f(); 
    return 0; 
} 
Questions connexes