Пользовательские преобразования типов: пользовательское неявное приведение объекта класса

В С++ вложено столько потенциала, что о некоторых приёмах мало кто говорит или пишет. Бывает, что нечто такое настолько очевидно, что о нём писать или особо говорить нечего. Кто-то считает, что если программист талантлив, то всё сам поймёт. Я считаю по другому, но это другая история. Одна из возможностей языка С++ — это учить объекты классов приводиться к какому-то типу. Это может быть полезно.

Чтобы научить объект класса приводится к какому-то типу, нужно использовать вот такую штуковину:

Есть понятие перегрузки операций, которое сразу могло прийти в голову при виде ключевого слова operator. В нашем случае это то, что будет учить класс приводить свой объект к указываемому типу, сейчас к int. После ключевого слова operator нужно написать тип, после которого поставить формальные круглые скобки. Нужно ещё добавить тело в фигурных скобках, в нём можно описать какие-то действия и обязательно нужно вернуть значение. Возвращаемое значение должно иметь совместимый тип с типом, указанным после слова operator. Если мы учим класс приводить объект к типу int, то и возвращать из мозга класса надо тип int, что вообще-то логично. Если бы это был string, то вот так

Вступительная часть закончена, можно показать пример:

В этом примере используется конструктор класса с одним параметром, в него приходит значение, которое отдаётся вовнутрь класса, в x. Этот самый x возвращается из operator int(). Так как я уже объяснял, что если класс обучается приводить тип своего объекта к какому-то определённому типу, то он должен отдавать совместимый тип, то надеюсь вопросов по этому поводу не возникнет.

Так можно приводить не только к фундаментальным типам данных, но и к любым вообще. Единственное, нужно понимать, что такого вида приём может использоваться в одном конкретном классе только один раз.

  • в неявных преобразованиях может участвовать не более одного определённого пользователем преобразования. Никаких цепочек.

Я могу привести ещё один пример, но не смогу достойно описать что в нём есть что.
Этот пример, который будет написан ниже, демонстрирует возможность использования неявного пользовательского приведения типа одного объекта к типу другого объекта, а тип того другого объекта сам по себе умеет приводиться к какому-то типу, в данном случае к int.

Основное описание происходящего написано в комментариях кода. Таким образом, используя неявное приведение, у нас получается два значения, типы которых одинаковые, а объекты одного типа можно присваивать, это в С++ разрешается. Поэтому этот последний пример работает на ура.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- Алло! Скажите, почему ваш антивирус так долго проверяет фильм? - А как вы хотели? Он его смотрит!

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок