class base {
public:
void virtual fn(int i) {
cout << "base" << endl;
}
};
class der : public base{
public:
void fn(char i) {
cout << "der" << endl;
}
};
int main() {
base* p = new der;
char i = 5;
p->fn(i);
cout << sizeof(base);
return 0;
}
Here signature of function fn defined in base
class is different from signature of function fn()
defined in der
class though function name is same.
Therefore, function defined in der
class hides base
class function fn()
. So class der
version of fn cannot be called by p->fn(i)
call; It is fine.
My point is then why sizeof
class base
or der
is 4
if there is no use of VTABLE pointer? What is requirement of VTABLE pointer here?
der::fn(char)
hidesbase::fn(int)
. – Zoosporangiumvirtual
keyword & 2. Matching function parameters with the exception of co-variant return types. – Purposive