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.
Quiz of this Question