#include <iostream>#include <vector>using namespace std;inline void print(char *msg)...{ cout << " " << msg << endl;}class A...{public: virtual void foo1() ...{ print("A:foo1"); } void foo2() ...{ print("A:foo2"); }};class B: public A...{public: void foo1() ...{ print("B:foo1"); } void foo2() ...{ print("B:foo2"); }};class Test...{public: Test(char *msg, void (*fun)()) ...{ msg_ = msg; fun_ = fun; } void run() ...{ cout << msg_ << endl; fun_(); } char *msg_; void (*fun_)();};void test1()...{ A * a = new B(); B * b = (B*)a; b->foo1(); b->foo2(); a->foo1(); a->foo2(); delete a;}void test2()...{ B *b = new B(); b->foo1(); b->foo2(); A *a = b; a->foo1(); a->foo2(); delete b;}void test3()...{ B b; b.foo1(); b.foo2(); ((A)b).foo1(); ((A)b).foo2();}void test4()...{ B b; b.foo1(); b.foo2(); A *a = &b; a->foo1(); a->foo2();}void test5()...{ A a; B* b = (B*)&a; b->foo1(); b->foo2(); a.foo1(); a.foo2();}int main()...{ vector<Test *> tests; vector<Test *>::iterator t_iterator; tests.push_back(new Test("test1", &test1)); tests.push_back(new Test("test2", &test2)); tests.push_back(new Test("test3", &test3)); tests.push_back(new Test("test4", &test4)); tests.push_back(new Test("test5", &test5)); for (t_iterator=tests.begin(); t_iterator!=tests.end(); t_iterator++) ...{ (*t_iterator)->run(); } system("PAUSE");}