Вопрос знатокам ООП и С++. Перегрузка оператора =

Форум для программистов

Вопрос знатокам ООП и С++. Перегрузка оператора =

Сообщение Andrew » Пн окт 21, 2002 1:58 am

Значит имеется класс CA
Необходимо перегрузить оператор = , но таким образом чтобы выполнялось следующее:

CA A;
BOOL B=A;

но не наоборот.

Проблема в том, что BOOL - стандартный тип. Присвоение типа:
A=B;
я умею делать но думаю вы поняли что мне нужно именно обратное.

Если конечно, это возможно.
Что нас не убъет, то сделает нас сильнее.
Первая проба пера <a href="http://t5-keeper.livejournal.com/" target="_blank">http://t5-keeper.livejournal.com/</a>
Andrew
Подполковник
 
Сообщений: 587
Зарегистрирован: Чт мар 28, 2002 6:29 pm
Откуда: Минск
Пункты репутации: 0

Сообщение go_micha » Пн окт 21, 2002 8:22 pm

class CCA
{
BOOL m_bool;
public:
CCA(BOOL vb = TRUE) { m_bool = vb; }
operator int() { return (int)m_bool; }
BOOL operator = (const CCA& ca) { return (BOOL)m_bool; }
};

Потом где-то у себя в коде можешь написать так:
....................
....................
CCA ca1(0), ca2(1), ca3(10);

BOOL b1 = (BOOL)ca1;
BOOL b2 = (BOOL)ca2;
BOOL b3 = (BOOL)ca3;
....................
....................
// и даже так:
CCA* pcA = new CCA(0);
BOOL bCA = (BOOL)*(CCA*)pcA;
....................
....................
delete pcA;

Только учти что BOOL это не bool, поэтому b3 будет равняться 10 а не 1!
go_micha
Рядовой
 
Сообщений: 9
Зарегистрирован: Пн окт 21, 2002 5:51 pm
Пункты репутации: 0

Сообщение igorl » Вт окт 22, 2002 5:47 am

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->class CCA
{
  BOOL   m_bool;
public:
   CCA(BOOL vb = TRUE) { m_bool = vb; }
   operator int()                               { return (int)m_bool; }
   BOOL operator = (const CCA& ca) { return (BOOL)m_bool; }
};
...
<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
А почему сразу не сделать
Код: выделить все

operator BOOL() { return m_bool; }


?
igorl
Капитан
 
Сообщений: 167
Зарегистрирован: Вт апр 09, 2002 8:33 am
Откуда: Санкт-Петербург
Пункты репутации: 0

Сообщение go_micha » Вт окт 22, 2002 10:28 am

Да, ты прав. Так тоже можно. Только вопрос стоял о перегрузке оператора =.
go_micha
Рядовой
 
Сообщений: 9
Зарегистрирован: Пн окт 21, 2002 5:51 pm
Пункты репутации: 0

Сообщение Andrew » Ср окт 23, 2002 1:04 pm

go_micha


igorl
Спасибо ребята. оказывается мне достаточно было объявить оператор BOOL. Прикол в том что в списке перегружаемых операторов в MSDN ни BOOL, ни операторов других типов не было. Недоработка мелкософта.
Что нас не убъет, то сделает нас сильнее.
Первая проба пера <a href="http://t5-keeper.livejournal.com/" target="_blank">http://t5-keeper.livejournal.com/</a>
Andrew
Подполковник
 
Сообщений: 587
Зарегистрирован: Чт мар 28, 2002 6:29 pm
Откуда: Минск
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

cron