Why, here the size of class 'Derived' is 8 ?
class Base1
{
public:
virtual void f() { }
};
class Base2
{
public:
virtual void f() { }
};
class Derived : public Base1, Base2
{
public:
virtual void f() { }
};
Why, here the size of class 'Derived' is 8 ?
class Base1
{
public:
virtual void f() { }
};
class Base2
{
public:
virtual void f() { }
};
class Derived : public Base1, Base2
{
public:
virtual void f() { }
};
'virtual' means, 'keep a record inside the class for which function I should call'. Otherwise, the compiler doesn't know anything except the type of the variable/pointer.
For example:
class Base1
{
public:
void f() { }
};
class Derived : public Base1
{
public:
void f() { }
};
main() {
Base1 *p=new Derived();
p->f(); // Without virtual, it calls Base1's f()
}
Adding virtual allows it to remember that f() was overloaded / replaced. This memory takes a little space.