Есть ли связь между тем, как происходит кастинг и концепцией полиморфного поведения - PullRequest
1 голос
/ 04 ноября 2010

Есть ли связь между тем, как происходит кастинг, и концепцией полиморфного поведения?

Ответы [ 2 ]

1 голос
/ 04 ноября 2010

В C ++ объект может наследоваться от нескольких базовых классов, и в этом случае, как правило, внутри объекта будет независимая и непрерывная область памяти, которая соответствует структуре памяти каждой базы. Это позволяет компилятору легко передавать указатель / ссылку на подкомпонент «базовый класс», если производный объект будет использоваться в качестве аргумента функции, ожидающей базовый класс. static_cast и dynamic_cast аналогичным образом выбирают конкретную часть субъекта, на которую нужно указать, на основе типа приведения к типу, хотя dynamic_cast идет дальше и выполняет ограниченную проверку во время выполнения правильности приведения, возвращая 0, если дан указатель на отличный от - спросил производный класс. Переинтерпретация приведений не имеет специальной поддержки для поиска конкретных базовых объектов при указателе на производный объект и не корректирует и не проверяет указатель. Вкратце, совершенно верно сказать, что некоторые функции приведения и полиморфизма в C ++ должны работать совместно.

1 голос
/ 04 ноября 2010

Специфично для C ++, приведение иногда используется так:

void TestFunction(BaseClass* base_class_object)
{
    DerivedClass* d = dynamic_cast<DerivedClass*>(base_class_object); 
    d->method(); 
}

Если предположить, что BaseClass объявлен как полиморфный (т. Е. Имеет метод virtual), dynamic_cast будет корректносотворите base_class_object, если он указывает на полный DerivedClass объект.В противном случае IIRC вернет нулевой указатель.Таким образом, во время выполнения вы можете динамически определять тип объекта и делать с ним больше вещей с помощью «приведения».


Обновление -

Ответ Тони и комментарий Алса прекрасно дополняют мой ответ и дают более полную картину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...