Predict the output of following C++ program. Assume that there is no alignment and a typical implementation of virtual functions is done by the compiler.
#include <iostream> using namespace std;
class A
{ public :
virtual void fun();
}; class B
{ public :
void fun();
}; int main()
{ int a = sizeof (A), b = sizeof (B);
if (a == b) cout << "a == b" ;
else if (a > b) cout << "a > b" ;
else cout << "a < b" ;
return 0;
} |
(A) a > b
(B) a == b
(C) a < b
(D) Compiler Error
Answer: (A)
Explanation: Class A has a VPTR which is not there in class B.
In a typical implementation of virtual functions, compiler places a VPTR with every object. Compiler secretly adds some code in every constructor to this.