I get several objects of type **Foo** from a call to an external API. Locally I want to process those objects with a little added information so I have a subclass **FooSon** that adds those extra fields. How can I convert all those objects I get, to my new inherited type? Downcasting doesn't seem to be an option because those objects aren't really **FooSon**. 

The only solution I have come up with is creating a convert function that takes the **Foo** object as an argument and then copies all public/protected values to a new **FooSon** object that is then returned. 

The disadvantages are: 

* Loosing information (private values)
* Having to adapt the convert function if **Foo** is ever changed.

Class Foo doesn't implement a copy constructor or clone operator. I have the Foo source code but I would like to avoid changing it in order to keep compatibility with future releases. Nevertheless if it is the only viable alternative I would change the Foo implementation to get what I need.