Как сделать такую штуку double a = (doule)(CTime(777)); ?
От: m_dotNET Россия  
Дата: 16.02.04 19:06
Оценка:
Добрый вечер, господа. Возник вопрос, а Страуструпа читать времени нет.
Могу я описать operator преобразования к базовому типу? К типу который проектировал не я?
Какой будет синтаксис?
Спасибо за помощь.
Завтра сегодня будет вчера.
Re: Как сделать такую штуку double a = (doule)(CTime(777));
От: korzhik Россия  
Дата: 16.02.04 19:32
Оценка: 2 (1)
Здравствуйте, m_dotNET, Вы писали:

_NE>Добрый вечер, господа. Возник вопрос, а Страуструпа читать времени нет.

_NE>Могу я описать operator преобразования к базовому типу? К типу который проектировал не я?
_NE>Какой будет синтаксис?

class A
{
  int m_i;
public:
  A() : m_i(5) {};
  operator double();
};

A::operator double()
{
  std::cout << "operator double" << std::endl;
  return double(m_i);
}

void main()
{
  A a;
  double d = a;
}
Re[2]: Спасибо
От: m_dotNET Россия  
Дата: 16.02.04 19:57
Оценка:
Похоже, что все операторы преобразования типов обязаны быть нестатическими членами.
У меня по крайней мере такой код не скомпилировался. Или можно обойти это ограничение? А то я не могу в реализацию класса влазить.

#include <atltime.h>

operator double( const CTime& t )   // error C2801: 'operator user-defined conversion' must be a non-static member
{
    return ( double )t.GetTime();
}

operator CTime( const double t )    // error C2801: 'operator user-defined conversion' must be a non-static member
{
    return CTime( ( __time64_t )t );
}
Завтра сегодня будет вчера.
Re: Как сделать такую штуку double a = (doule)(CTime(777));
От: Павел Кузнецов  
Дата: 16.02.04 20:00
Оценка:
Здравствуйте, m_dotNET, Вы писали:

m> Могу я описать operator преобразования к базовому типу?

m> К типу который проектировал не я?

Нет. Напиши "нормальную" именованную функцию — и все дела
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: Как сделать такую штуку double a = (doule)(CTime(777)
От: m_dotNET Россия  
Дата: 16.02.04 20:18
Оценка:
Так и сделал. Хотелось поэлегантней

Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Здравствуйте, m_dotNET, Вы писали:


m>> Могу я описать operator преобразования к базовому типу?

m>> К типу который проектировал не я?

ПК>Нет. Напиши "нормальную" именованную функцию — и все дела
Завтра сегодня будет вчера.
Re[3]: Спасибо
От: korzhik Россия  
Дата: 16.02.04 20:21
Оценка:
Здравствуйте, m_dotNET, Вы писали:

_NE>Похоже, что все операторы преобразования типов обязаны быть нестатическими членами.


// error C2801: 'operator user-defined conversion' must be a non-static

И этим всё сказано.

_NE>Или можно обойти это ограничение? А то я не могу в реализацию класса влазить.


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

#include <atltime.h>

class CMyTime : public CTime
{
public:
  CMyTime( int nYear, int nMonth, int nDay, 
         int nHour, int nMin, int nSec, int nDST = -1 ) :
  CTime( nYear, nMonth, nDay, nHour, nMin, nSec, nDST ) {}  
// И так для каждого нужного конструктора

  operator double();
};
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//
CMyTime::operator double()
{
  std::cout << "operator double" << std::endl;
  return ( double )GetTime();
}

void main()
{
  CMyTime tm( 2004, 12, 11, 11, 11, 11 );
  
  double d = tm; 
}
Re[3]: Как сделать такую штуку double a = (doule)(CTime(777)
От: Bell Россия  
Дата: 17.02.04 07:29
Оценка: +1
Здравствуйте, m_dotNET, Вы писали:

_NE>Так и сделал. Хотелось поэлегантней


ИМХО операторы преобразования и элегантность лежат в разных плоскостях.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.