#include using namespace std; class B { public: B ( void ); virtual ~B ( void ); //遵循1 virtual void f ( int a ) = 0; protected: B ( const B & ); B &operator = ( const B & ); }; B::B ( void ) { } B::~B ( void ) { } class D : public B { public: D ( void ); explicit D ( int a ); virtual ~D ( void ); //遵循2 virtual void f ( int a ); private: int *md; D ( const D & ); D &operator = ( const D & ); }; D::D ( int a ) : B ( ), md ( new int ) { *md = a; } void D::f ( int a ) { *md = a; } D::~D ( void ) { delete md; md = NULL; } int main ( void ) { B *d = new D ( 1 ); d->f ( 2 ); delete d; d = NULL; return ( 0 ); }