I am trying to understand why static_cast works different when it is performed on object than when it is performed on a pointer to object.
class A
{
    int myA;
public:
    A() { myA = 11; };
    virtual void Do() {  printf("\n A class is executed "); }
};
class B : public A
{
    int myB;
public:
    B(){ myB = 22; }
    void Do() {   printf("\n B class is executed "); }
};
When the following cast is performed, A::Do() is executed. Why? Why B's virtual table is neglected?
A t_a;
B t_b;
(static_cast<A>(t_b)).Do();  //output: A class is executed
But when it is done via pointer, B::Do() is executed.
A* pA = new B;
pA->Do();
(static_cast<A*>(pA))->Do();   //output: B class is executed
Can you give me a full explanation (including memory layout) to understand the difference.
