could you please explain why pointTo needs to be initialized in the constructor?
Since array has not been allocated in memory yet, you can't take it's address. array only exists in memory when Yellow is instantiated.
1 2
Pink array[size];
int *pointTo = &Pink;
BTW, you can't take the address of a type (Pink). You can only take the address of an object that exists in memory. Types tell the compile what something looks like, but don't occupy memory until they are instantiated.