int main() { D4 od4; chkVal(__LINE__, "od4.vf1()", od4.vf1(), 101); chkVal(__LINE__, "od4.vf2()", od4.vf2(), 201); chkVal(__LINE__, "od4.vf3()", od4.vf3(), 301); chkVal(__LINE__, "od4.vf4()", od4.vf4(), 401); // Check access through pointer to right "diamond" lattice // R1* rptr = new D4; chkVal(__LINE__, "rptr->vf1()", rptr->vf1(), 101); // should call R1::vf1 chkVal(__LINE__, "rptr->vf2()", rptr->vf2(), 201); // should call L2::vf2 chkVal(__LINE__, "rptr->vf3()", rptr->vf3(), 301); // should call L3::vf3 chkVal(__LINE__, "rptr->vf4()", rptr->vf4(), 401); // should call R4::vf4 // Check access through pointer to left "diamond" lattice // L3* lptr = new D1; chkVal(__LINE__, "lptr->vf1()", lptr->vf1(), 101); // should call R1::vf1 chkVal(__LINE__, "lptr->vf2()", lptr->vf2(), 201); // should call L2::vf2 chkVal(__LINE__, "lptr->vf3()", lptr->vf3(), 301); // should call L3::vf3 chkVal(__LINE__, "lptr->vf4()", lptr->vf4(), 401); // should call R4::vf4 _PASS; }