Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Игра в С++


Автор: Fazil6 13.7.2007, 15:05
опять же как Вы думаете
допустим
Код

class A
{
public:
    A():x(0){};

    operator bool()const {return x;}
    
    A& get()
    {
        x++;
        return *this;
    }
    int x;
};


эквивалентен ли код 
Код

int operator||( A x,  A y)
{
    if(x) return 200;
    if(y) return 300;

    return 0;
}
....
A a; 
A b;
bool s = a.get() || b.get();
std::cout << s;
....

коду если не перегружать оператор || ?

Автор: Daevaorn 13.7.2007, 15:23
Цитата(Fazil6 @  13.7.2007,  16:05 Найти цитируемый пост)
эквивалентен ли код 

чему?

Автор: Sartorius 13.7.2007, 15:25
Daevaorn, как я понял сам себе без перегруженного ||

Автор: Fazil6 13.7.2007, 15:34
Цитата(Sartorius @  13.7.2007,  15:25 Найти цитируемый пост)
как я понял сам себе без перегруженного ||

да. если не перегружать || получим ли мы в результате
Код

A a; 
A b;
bool s = a.get() || b.get();
std::cout << s;

ту тоже самое?

Автор: archimed7592 13.7.2007, 15:52
получим... почему не получить?
Код

A a; // a.x == 0
A b; // b.x == 0
bool s = a.get() || b.get(); // a.get().operator bool() || b.get().operator bool() // a.get->a.x==1, b.get->b.x==1, s==true
bool s = a.get() || b.get(); // operator ||(A(a.get()), A(b.get())) // a.get->a.x==1, b.get->b.x==1, s=true
std::cout << s;


Добавлено через 7 минут и 41 секунду
Fazil6, набираешь варианты ответов для теста по с++? Или другие цели преследуешь?

Автор: Fazil6 13.7.2007, 16:13
вообще-то думал не вызовет этот вопрос особых проблем... 
Цитата(archimed7592 @  13.7.2007,  15:52 Найти цитируемый пост)
получим... почему не получить?

спасибо. Вполне развернутый понятный ответ.

Может кто-нибудь имеет другое мнение?

Автор: Fazil6 13.7.2007, 17:17
Неужели ни у кого нет альтернативного мнения?

Автор: Fazil6 13.7.2007, 19:04
 smile 
совсем ниукого??? smile 

Автор: archimed7592 13.7.2007, 19:34
Цитата(Fazil6 @  13.7.2007,  19:04 Найти цитируемый пост)
совсем ниукого???

А у тебя какое? smile 

Ещё раз повторю вопрос: в чём цель игры(для тебя и для общества)? smile

Автор: Fazil6 13.7.2007, 19:53
Цитата(archimed7592 @  13.7.2007,  19:34 Найти цитируемый пост)
Ещё раз повторю вопрос: в чём цель игры(для тебя и для общества)? 

для меня - оценить задания, для общества - точно не знаю, надеюсь хуже ему от этого точно не станет, а может кто-то и что-то полезное найдет в этом

Цитата(archimed7592 @  13.7.2007,  19:34 Найти цитируемый пост)
А у тебя какое? 

мое мнение в этой ветке отсутствует, что меня, признаться, сильно удивляет...

Автор: archimed7592 13.7.2007, 19:58
Цитата(Fazil6 @  13.7.2007,  19:53 Найти цитируемый пост)
для меня - оценить задания

А задания сам придумываешь? smile А для чего?


Цитата(Fazil6 @  13.7.2007,  19:53 Найти цитируемый пост)
мое мнение в этой ветке отсутствует, что меня, признаться, сильно удивляет...

Т.е. ты не знаешь правильного ответа? smile Или не собираешься давать правильные ответы(сидите, мол, гадайте)? smile

Автор: Fazil6 13.7.2007, 20:01
Цитата(archimed7592 @  13.7.2007,  19:58 Найти цитируемый пост)
Т.е. ты не знаешь правильного ответа?

знаю

Цитата(archimed7592 @  13.7.2007,  19:58 Найти цитируемый пост)
Или не собираешься давать правильные ответы(сидите, мол, гадайте)?

ну вот я и хочу понять, его только я знаю или еще кто-нибудь?
Я не думал, что это задание сложное, поэтому и удивлен...

Добавлено через 53 секунды
Цитата(archimed7592 @  13.7.2007,  19:58 Найти цитируемый пост)
А задания сам придумываешь?

сам

Цитата(archimed7592 @  13.7.2007,  19:58 Найти цитируемый пост)
А для чего?

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

Автор: Melancholic 13.7.2007, 20:53
По логике код вообще не откомпилируется, ибо не определён operator||(A, A)

Автор: Fazil6 13.7.2007, 21:11
Цитата(Melancholic @  13.7.2007,  20:53 Найти цитируемый пост)
По логике код вообще не откомпилируется

откомпилируется.
не зря ведь определено преобразование
Код

operator bool()const {return x;}

так что это тоже неправильный ответ

Автор: Fazil6 14.7.2007, 14:56
Вопрос актуален.
Правильного ответа никто не привел. 

Автор: anthony 14.7.2007, 15:29
Код

bool s = a.get() || b.get();


Вызов a.get () возвращает ссылку на объект класса A. Для выполнения логического или необходимо привести ссылку на объект класса А к булевому типу, для чего используется перегруженный оператор приведения типа. Вторая половина b.get() не вычисляется, так как получен гарантированный результат - первый операнд дает истину.

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

Кроме того: пример "притянут за уши" по той причине, что перегрузка логического или - опасная и бесполезная вещь.

Автор: Ln78 14.7.2007, 15:39
Я так понимаю, что логическое или равно 1, когда первый операнд равен 1 (не нуль), поэтому, когда нет перегруженного оператора, то b.get() не вызывается, соответственно, в нём останется 0. Для определённого оператора, чтобы получить оба значения, для обеих операндов get() вызовется, поэтому оба они будут содержать в себе 1

Автор: Fazil6 14.7.2007, 17:22
Ln78, наконец-то...

Автор: Ln78 14.7.2007, 18:10
Цитата(Fazil6 @  14.7.2007,  17:22 Найти цитируемый пост)
Ln78, наконец-то...


Fazil6, это недолго. Вот я как-то придумал задачу, так то ли неудачно её разместил, то ли ещё почему, но особо желающих её решить не нашлось. Уж и zkv  перенёс её в другое место
http://forum.vingrad.ru/index.php?showtopic=152786&view=findpost&p=1119258
но это не помогло. Вроде как до сих пор её почему-то не решили. 

Автор: zkv 14.7.2007, 18:23
Цитата(Ln78 @  14.7.2007,  18:10 Найти цитируемый пост)
Уж и zkv  перенёс её в другое место

я только попросил модераторов перенести в с++, но они решили что теме этой место в "Интересных задачах..."
Во всяком случае, в теме про работу ей точно места не было. smile

Автор: bsa 14.7.2007, 19:36
Цитата(Ln78 @ 14.7.2007,  18:10)
Цитата(Fazil6 @  14.7.2007,  17:22 Найти цитируемый пост)
Ln78, наконец-то...


Fazil6, это недолго. Вот я как-то придумал задачу, так то ли неудачно её разместил, то ли ещё почему, но особо желающих её решить не нашлось. Уж и zkv  перенёс её в другое место
http://forum.vingrad.ru/index.php?showtopic=152786&view=findpost&p=1119258
но это не помогло. Вроде как до сих пор её почему-то не решили.

Конечно. Я, например, ничего не понял. Ты бы хоть контекст использования привел. А то изменится или не изменится.
Изменится - не будет даблы приводит к инту, чем повысит точность.  smile 

Автор: Ln78 14.7.2007, 22:13
bsa, наверное, этот вопрос лучше было задать в том топике, но можно и здесь. А что непонятно в вопросах? Есть две функции, операнды которых целые. Вопрос - одинаковы ли эти функции, т.е. при всех ли одинаковых значениях входов получаются одинаковые выходы? И другой вопрос, есть другие 2 функции, но у них операнды типа double, для них тоже нужно ответить, одинаковы ли они? Или непонятно, как вызывать функцию с двумя входными параметрами (что ты имел в виду, говоря о контексте использования)?

Автор: bsa 14.7.2007, 22:52
Я имел в виду вызов функций в обоих вариантах с параметрами нецелого типа - что-то у меня шарики за ролики заехали.  smile 
Если честно, разницы не вижу. А если она есть, то это противоречит математике - операция '<=' обратна '>'.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)