Вы, наверное, вообще не хотите здесь кастоваться. Если у Parent есть какие-либо абстрактные методы, вы просто вызываете их, и производный класс автоматически обрабатывает их правильно.
Бывают случаи, когда вы связываете относительно несвязанные элементы друг с другом, чтобы вы могли сохранить их в коллекции, либо в разных типах, либо в ситуациях, когда различное состояние приводит к несвязанным объектам, которые обрабатываются по-разному, и в этих случаях вы можете захотеть разыграть.
Кстати, я весьма удивлен, что вы не получили ошибку компилятора в GetThing (), потому что вы объявили c как функцию, поэтому вы не возвращаете Parent.
Кроме того, кстати, если вы копируете по значению, вы будете «разрезать» таким образом:
Child c;
Parent p(c);
Child & c2 = dynamic_cast< Child& >(p); // throws bad_cast