Преобразования, определяемые классом CPP
Условно, все преобразования типов во многих языках, в том числе и C++, можно разделить на четыре основные группы:
- Cтандартный к стандартному - эти преобразования уже были нами подробно рассмотрены в одном из уроков.
- Cтандартный к абстрактному - преобразования этой группы основаны на использовании конструкторов.
#include <iostream> using namespace std; class Digit { private: int dig; public: Digit(int iDig){ dig=iDig; } void Show(){ cout<<dig<<"\n"; } }; void main() { // преобразование от int к Digit Digit A(5); A.Show(); // преобразование от double к Digit Digit B(3.7); B.Show(); }
Исходя из примера можно сделать вывод, что конструктор с одним аргументом Class::Class(type) всегда определяет преобразование типа type к типу Class, а не только способ создания объекта при явном обращении к нему.
- Абстрактный к стандартному
- Абстрактный к абстрактному
Для преобразования абстрактного типа к стандартному или абстрактного к абстрактному в С++ существует средство - функция, выполняющая преобразование типов, или оператор-функция преобразования типов. Она имеет следующий синтаксис:
Class::operator type (void);
Эта функция выполняет определенное пользователем преобразование типа Class к типу type. Эта функция должна быть членом класса Class и не иметь аргументов. Кроме того, в ее объявлении не указывается тип возвращаемого значения. Обращение к этой функции может быть как явным, так и неявным. Для выполнения явного преобразования можно использовать как традиционную, так и "функциональную" форму.
#include <iostream> using namespace std; class Number{ private: int num; public: Number(int iNum){ num=iNum; } void Show(){ cout<<num<<"\n"; } }; class Digit { private: int dig; public: Digit(int iDig){ dig=iDig; } void Show(){ cout<<dig<<"\n"; } //преобразование от Digit к int operator int (){ return dig; } //преобразование от Digit к Number operator Number (){ return Number(dig); } }; void main() { Digit A(5); cout<<"In Digit A:\n"; A.Show(); // преобразование от Digit к int int a=A; cout<<"In int a:\n"; cout<<a<<"\n"; Digit B(3); cout<<"In Digit B:\n"; B.Show(); Number b(0); cout<<"In Number b (before):\n"; b.Show(); //преобразование от Digit к Number b=B; cout<<"In Number b (after):\n"; b.Show(); }
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах