I have a question. I've done something similar to the example on this page. https://www.tutorialspoint.com/cplusplus/cpp_interfaces.htm What they've got there is a virtual class that's called Shape. And then a load of derived classes called things like Rectangle and Circle etc. Then the go Rectangle rectangle = new Rectangle(); What I can't see is a way to declare a variable of type Shape. I don't care if that winds up a Rectangle or Circle because they both will implement the interface. How can I do the following? Shape shape = methodThatWillGiveMeRectOrCircle(); My compiler can't compile that method. It says: > error: return type 'Shape' is an abstract class