Понеділок, 27.01.2025
Все про все



Хочу заказать чертеж или деталь в Компас 3D.




Группа ВК
Меню сайту
Форма входу
Категорії розділу
C++ [10]
C [6]
Вміст сайту
Коментарі: 28
Форум: 2/2
Фото: 109
Блог: 69
Новини: 9
Файли: 18
Тексти: 664
Сайти: 2
Дошка оголошень: 9
Відео: 14
Гостьова книга: 10
Теги
c++ (10)
nod 32 (4)
Заробіток
//wmlink.ru/index.php?ref=240844
Головна » Статті » Програмування » C++

Поділися матеріалом в соц. мережах
Якщо вам не важко, можете прийняти участь в цьому опитуванні =)
Найкращий день тижня
Всего ответов: 565
RUS Уроки по программированию на языке С++ (Преобразования, определяемые классом.)


Преобразования, определяемые классом.

Условно, все преобразования типов можно разделить на четыре основные группы:

  • 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();

}


Категорія: C++ | Додав: DEN-SHP (15.08.2013)
Переглядів: 820 | Теги: c++ | Рейтинг: 0.0/0
Поділися матеріалом в соц. мережах
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]
Пошук
Реклама
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0

Проверка тиц pr счетчик посещений Яндекс.Метрика
Copyright DEN-SHP © 2025
Безкоштовний конструктор сайтів - uCozЯндекс.Метрика