请问最后为什么输出236?求解答

class Base{
protected:
int a,b;
public:
Base(int x=2,int y=3){ a=x; b=y; }
virtual void show() { cout<<a<<b; }
virtual void print() { cout<<a+b; }
};
class Derived:public Base{
public:
void show(int n=4) { cout<<a+b+n; }
void print() { cout<<a*b; }
};
int main(void)
{
Base *p=new Derived;
p->show();
p->print();
delete p;
system("pause");
return 0;

当执行p->show();的时候,因为show没有形参,所以调用的是其父类的show(){ cout<<a<<b; },然后自然输出了23。
当执行p->print();的时候,则执行了 Derived内的void print() { cout<<a*b; },输出为6。合起来就是输出了236