Consider:
class A
{
public:
virtual void update() = 0;
}
class B : public A
{
public:
void update() { /* stuff goes in here... */ }
Moving away from the non issue of the vtable pointer in your object:
Your code has other problems:
A * array = new A[1000];
array[0] = new B();
array[1] = new C();
The problem you are having is the slicing problem.
You can not put an object of class B into a space the size reserved for an object of class A.
You will just slice the B(or C) part of the object clean off leaving you with just the A part.
What you want to do. Is have an array of A pointers so that it hold each item by pointer.
A** array = new A*[1000];
array[0] = new B();
array[1] = new C();
Now you have another problem of destruction. Ok. This could go on for ages.
Short answer use boost:ptr_vector<>
boost:ptr_vector array(1000);
array[0] = new B();
array[1] = new C();
Never allocte array like that unless you have to (Its too Java Like to be useful).