Простой ответ: если вам нужно получить доступ к функциональности производного класса из указателя базового класса, у вас возникнет проблема с дизайном. В принципе, вам не нужно знать. Если вы это сделаете, что-то не так. Вы считаете (в чистом смысле) вызов виртуальных функций из интерфейса базового класса и производные классы реализуют свои переопределения, чтобы они выполняли корректно.
Теперь, иногда, практически, вам нужно. Таким образом, есть возможность понижения. Если у вас есть информация о типе времени выполнения в вашей сборке, вы можете сделать dynamic_cast<type*>
, и если возвращаемый указатель не равен нулю, то у вас есть экземпляр этого типа.
Если вы идете по этому пути, оберните его чем-то аккуратным и не позволяйте ему размножаться - он может стать беспорядочным. Я предлагаю вам посмотреть, нет ли лучшего способа, используя полиморфизм.
Удачи!
Возможно, вы можете показать код, который у вас есть, чтобы люди могли помочь вам с вашей конкретной проблемой. –
Я предполагаю, что вы храните учетные записи по типу базового класса, а не по указателю на базовый класс, поэтому нарезаете объекты. –
Джон делает хороший момент - когда вы проходите объекты вокруг, делайте это по указателю, иначе вы будете обрезать объекты. http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c – Ragster