// We introduce a function called operation in C which activates the // operation in both A and B. We do NOT get the intended results. // Why? The methods are not virtual. #include #include using namespace std; class A { public: int data; int operation(){ cout << "A: operation" << endl; return data; } }; class B { public: int data; int operation(){ cout << "B: operation" << endl; return data; } }; class C: public A, public B{ public: int operation(){ cout << "C: operation" << endl; int r1 = A::operation(), r2 = B::operation(); return r1 + r2; } }; int f(A* obj){ int res = obj->operation(); return res; } int main(){ A *obj = new C(); // Polymorphism: // A variable of static type A refers to a C-object f(obj); // ACTUAL OUTPUT: // A: operation. // WANTED AND EXPECTED OUTPUT: // C: operation. // A: operation. // B: operation. // What is the problem? The methods are not virtual. }