C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Риализация операторов в классах, Как сделать?
telepath
Отправлено: 06.07.2004, 10:27


Станционный диспетчер

Группа: Участник
Сообщений: 132



Допустим есть класс:
CODE

class TTemp
{
public:
    int a;
    AnsiString b;
}

Как реализовать сложение двух объектов такого класса?
Георгий
Отправлено: 06.07.2004, 11:59


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



как складывать яблоки с апельсинами?
никто не знает что в результате будет smile.gif

точно также складываются и классы — если из предметной области понятно что в результате будет, то операцию сложения можно определить, в противном случае, как и в приведённом тобою примере, результат сложения не понятен.

сделать можно так:
1. каждое из полей складывается по отдельности
CODE
class TTemp
{
public:
   int a;
   AnsiString b;
   TTemp(const TTemp& t):a(t.a),b(t.b){};
   TTemp( int a, const AnsiString& b):a(a),b(b){};
   TTemp( void ):a(0){};
   TTemp& operator=(const TTemp& t)
{
this->a=t.a;
this->b=t.b;
return *this;
};
   TTemp& operator+=(const TTemp& t)
{
this->a+=t.a;
this->b+=t.b;
return *this;
};

   TTemp operator+(const TTemp& t)const
{
TTemp tmp(*this);
tmp+=t;
return tmp;
};
};

2 а можно, что бы в результате сложения 'a' складывалось с 'b', а 'b' с 'a'
CODE
class TTemp
{
public:
   int a;
   AnsiString b;
   TTemp(const TTemp& t):a(t.a),b(t.b){};
   TTemp( int a, const AnsiString& b):a(a),b(b){};
   TTemp( void ):a(0){};
   TTemp& operator=(const TTemp& t)
{
this->a=t.a;
this->b=t.b;
return *this;
};
   TTemp& operator+=(const TTemp& t)
{
       int tmp;
try{
        tmp = t.b.ToInt();
}catch( EConvertError& )
        {
        tmp = 0;
        };
this->a+= tmp;
this->b+=IntToStr(t.a);
return *this;
};

   TTemp operator+(const TTemp& t)const
{
TTemp tmp(*this);
tmp+=t;
return tmp;
};
};

можно придумать и более экзотические варианты, но они в голови не приходят — сейчас слишком трезвый smile.gif
telepath
Отправлено: 06.07.2004, 13:44


Станционный диспетчер

Группа: Участник
Сообщений: 132



Большое спасибо smile.gif

Вернуться в Вопросы программирования в C++Builder