telepath |
Отправлено: 06.07.2004, 10:27 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Допустим есть класс:
CODE |
class TTemp
{
public:
int a;
AnsiString b;
} |
Как реализовать сложение двух объектов такого класса? |
|
Георгий |
Отправлено: 06.07.2004, 11:59 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
как складывать яблоки с апельсинами?
никто не знает что в результате будет
точно также складываются и классы — если из предметной области понятно что в результате будет, то операцию сложения можно определить, в противном случае, как и в приведённом тобою примере, результат сложения не понятен.
сделать можно так:
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;
};
}; |
можно придумать и более экзотические варианты, но они в голови не приходят — сейчас слишком трезвый |
|
telepath |
Отправлено: 06.07.2004, 13:44 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Большое спасибо |
|
|