Главная » Статьи » Програмування » C++ [ Добавить статью ]

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 (06.11.2012)
Просмотров: 976 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]