1*f44e1df9SAmir Ayupov #include <stdio.h> 2*f44e1df9SAmir Ayupov #include <stdlib.h> 3*f44e1df9SAmir Ayupov #include <vector> 4*f44e1df9SAmir Ayupov 5*f44e1df9SAmir Ayupov using namespace std; 6*f44e1df9SAmir Ayupov 7*f44e1df9SAmir Ayupov class Base { 8*f44e1df9SAmir Ayupov public: 9*f44e1df9SAmir Ayupov virtual int Foo() = 0; 10*f44e1df9SAmir Ayupov }; 11*f44e1df9SAmir Ayupov 12*f44e1df9SAmir Ayupov class Derived1 : public Base { 13*f44e1df9SAmir Ayupov public: Foo()14*f44e1df9SAmir Ayupov int Foo() override { return 1; } 15*f44e1df9SAmir Ayupov }; 16*f44e1df9SAmir Ayupov 17*f44e1df9SAmir Ayupov class Derived2 : public Base { 18*f44e1df9SAmir Ayupov public: Foo()19*f44e1df9SAmir Ayupov int Foo() override { return 2; } 20*f44e1df9SAmir Ayupov }; 21*f44e1df9SAmir Ayupov 22*f44e1df9SAmir Ayupov class Derived3 : public Base { 23*f44e1df9SAmir Ayupov public: Foo()24*f44e1df9SAmir Ayupov int Foo() override { return 3; } 25*f44e1df9SAmir Ayupov }; 26*f44e1df9SAmir Ayupov main(int argc,char * argv[])27*f44e1df9SAmir Ayupovint main(int argc, char *argv[]) { 28*f44e1df9SAmir Ayupov long long sum = 0; 29*f44e1df9SAmir Ayupov int outerIters = atoi(argv[1]); 30*f44e1df9SAmir Ayupov int selector = atoi(argv[2]); 31*f44e1df9SAmir Ayupov 32*f44e1df9SAmir Ayupov Base *obj1 = new Derived1(); 33*f44e1df9SAmir Ayupov Base *obj2 = new Derived2(); 34*f44e1df9SAmir Ayupov Base *obj3 = new Derived3(); 35*f44e1df9SAmir Ayupov 36*f44e1df9SAmir Ayupov for (int j = 0; j < outerIters; j++) { 37*f44e1df9SAmir Ayupov for (int i = 0; i < 10000; i++) { 38*f44e1df9SAmir Ayupov switch (selector) { 39*f44e1df9SAmir Ayupov case 1: sum += obj1->Foo(); break; 40*f44e1df9SAmir Ayupov case 2: sum += obj2->Foo(); break; 41*f44e1df9SAmir Ayupov case 3: sum += obj3->Foo(); break; 42*f44e1df9SAmir Ayupov } 43*f44e1df9SAmir Ayupov } 44*f44e1df9SAmir Ayupov } 45*f44e1df9SAmir Ayupov printf("%lld\n", sum); 46*f44e1df9SAmir Ayupov } 47