Question: can you explain me why:

```
int main (int argc, char * const argv[]) {
    Parent* p = new Child();
    p->Method();
    return 0;
}

```

prints "**Child::Method()**", and this:

```
int main (int argc, char * const argv[]) {
    Parent p = *(new Child());
    p.Method();
    return 0;
}

```

prints "**Parent::Method()**"?

Classes:

```
class Parent {
public:
    void virtual Method() {
        std::cout << "Parent::Method()";
    }
};

class Child : public Parent {
public:
    void Method() {
        std::cout << "Child::Method()";
    }
};

```

Thanks,
Etam.

Answer: 
Virtual behaviour is only available when the virtual function is 
called via a pointer or a reference. When you say:

```
Parent p = *(new Child());
p.Method();

```

you have an actual Parent object, so Parent's method will always be called, no matter what you assign to p.
Polymorphism in C++ is only possible with pointers. The differentiation between the static and the dynamic type (in your first example p is of static type Parent\*, but of dynamic type Child\*, and this enables C++ to call the derived class' method) does not come into play with non-pointers.