#include using namespace std; class B { public: B ( void ); virtual ~B ( void ); virtual int g ( int a = 0 ); private: int b; }; B::B ( void ) : b ( 1 ) { } B::~B ( void ) { } int B::g ( int a ) { return ( a + b ); } class D : public virtual B { public: D ( void ); virtual ~D ( void ); virtual int g ( int a = 0 ); private: int d; }; D::D ( void ) : B ( ), d ( 2 ) { } D::~D ( void ) { } int D::g ( int a ) { return ( a + d ); } int main ( void ) { D d; B &b = d; B *pb = &d; D *pd1 = dynamic_cast < D * > ( pb ); //遵循1 D &pd2 = dynamic_cast < D & > ( *pb ); //遵循2 return ( 0 ); }