Well, from that example, there are only things that you have noted that are differences, but when using virtual functions and inheritance you'll see differences.
For example, here is the same code with pointers and without:
WITH POINTERS:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Create()
{
cout <<"Base class create function ";
}
};
class Derived : public Base
{
public:
void Create()
{
cout<<"Derived class create function ";
}
};
int main()
{
Base *x, *y;
x = new Base();
y = new Derived();
x->Create();
y->Create();
return 0;
}
OUTPUT:
Base class create function
Derived class create function
WITHOUT POINTERS:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Create()
{
cout <<"Base class create function ";
}
};
class Derived : public Base
{
public:
void Create()
{
cout<<"Derived class create function ";
}
};
int main()
{
Base x, y;
x.Create();
y.Create();
return 0;
}
OUTPUT:
Base class create function
Base class create function
So there are problems with objects and virtual functions. It is executed base class function when derived one should be. That is one of differences.