#include class ia { public: virtual void a1() =0; virtual ~ia() {} }; class ib { public: virtual void b1() =0; virtual ~ib() {} }; class agg1: public ia, public ib { public: virtual void a1() { std::cout << "a1 in agg1" << std::endl; } virtual void b1() { std::cout << "b1 in agg1" << std::endl; } }; int main() { ia* pa1(new agg1); pa1->a1(); //pa1->b1(); //error ib* pb1(dynamic_cast(pa1)); // CROSS CAST from ia to ib thanks to agg1 if(pb1) { //pb1->a1(); //error pb1->b1(); } delete pa1; }