#include using namespace std; class B { public: B ( void ); virtual ~B ( void ); virtual void f ( void ) = 0; protected: B &operator = ( B const &rhs ); //遵循1 private: int kind; }; B::B ( void ) : kind ( 0 ) { } B::~B ( void ) { } B & B::operator = ( B const &rhs ) { kind = rhs.kind; return ( *this ); } class D : public B { public: D ( void ); virtual ~D ( void ); virtual void f ( void ) { }; D &operator = ( D const &rhs ); private: int member; }; D::D ( void ) : B ( ), member ( 0 ) { } D::~D ( void ) { } D & D::operator = ( D const &rhs ) { member = rhs.member; return ( *this ); } int main ( void ) { D d1; D d2; B &b1 = d1; B &b2 = d2; b1 = b2; //由于采取了保护,此用法被禁止,编译报错 return ( 0 ); }