Различия

Показаны различия между двумя версиями страницы.


preobrazovanija_opredeljaemye_klassom [2021/07/31 21:58] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Преобразования, определяемые классом CPP ======
 +Условно, все преобразования типов во многих языках, в том числе и [[zametki_po_jazyku_c|C++]], можно разделить на четыре основные группы:
 +  * **Cтандартный к стандартному** - эти преобразования уже были нами подробно рассмотрены в одном из уроков.
 +  * **Cтандартный к абстрактному** - преобразования этой группы основаны на использовании конструкторов. 
 +<file>
 +#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();
 +
 +}
 +</file>
 +Исходя из примера можно сделать вывод, что конструктор с одним аргументом Class::Class(type) всегда определяет преобразование типа type к типу Class, а не только способ создания объекта при явном обращении к нему. 
 +
 +  * Абстрактный к стандартному
 +  * Абстрактный к абстрактному 
 +Для преобразования абстрактного типа к стандартному или абстрактного к абстрактному в С++ существует средство - функция, выполняющая преобразование типов, или оператор-функция преобразования типов. Она имеет следующий синтаксис: 
 +<file>
 +Class::operator type (void);
 +</file> 
 +Эта функция выполняет определенное пользователем преобразование типа Class к типу type. Эта функция должна быть членом класса Class и не иметь аргументов. Кроме того, в ее объявлении не указывается тип возвращаемого значения. Обращение к этой функции может быть как явным, так и неявным. Для выполнения явного преобразования можно использовать как традиционную, так и "функциональную" форму. 
 +
 +<file>
 +#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();
 +}
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!