Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос по перегрузке
     
     
    struct B  
    {
        operator short()
        {
            return 1;
        }    
    };
     
    struct A  
    {
        A(B)
        {
            
        }
    };
     
    void test(int) // (1)
    {
     
    }
     
    void test(A) // (2)
    {
     
    }
     
    int main()  
    {
        B x;
        test(x);
        return 0;
    }
     
    Разрешение перегрузки
     
     для test(1)
     1. определяемое пользователем преобразование B -> short
     2. продвижение short->int
     
     для test(2)
     1. определяемое пользователем преобразование B -> A
     
     
    IMHO: test(2) - есть предпочтительнее
    Так ли это? или я что-то пропустил в цепочках разрешения перегрузки.
    Вопрос возник потому что, компиляторы ведут себя по разному:
     
     
    Intel C++ 8.1      - ok, call test(2)
    MS VC++ 6.0 SP6    - fail, ambiguous call
    Comeau online test - fail, ambiguous call
    MC VC++ 2003 (7.1) - fail, ambiguous call
    MC VC++ 2005 (8.0) - fail, ambiguous call

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 18:35 21-02-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Labutin
    veronica b
    А какая разница, cin или scanf? Читаем в строку и парсим.
     
    Добавлено:
    RedLord
    Однозначно ambiguous call. В обоих случаях имеет место преобразования одинакового уровня предпочтения - пользовательское.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 18:36 21-02-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer

    Цитата:
    А какая разница, cin или scanf? Читаем в строку и парсим.

    Человек хочет cin/
    RedLord
    Мое мнение, что Qraizer прав, а разработчики Intel C++ 8.1 ошиблись!
     
     

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 18:48 21-02-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    veronica b
     
    Тогда почему
     
     
    struct Dummy  
    {
    };
    struct B  
    {
        operator short()
        {
            return 1;
        }    
        operator Dummy()
        {
            return Dummy();
        }    
    };
     
     
    void test(int) // (1)
    {
        
    }
     
    void test(Dummy) // (2)
    {
        
    }
     
    int main()  
    {
        B x;
        test(x);
        return 0;
    }
     
    Разрешение перегрузки
     
     для test(1)
     1. определяемое пользователем преобразование B -> short
     2. продвижение short->int
     
     для test(2)
     1. определяемое пользователем преобразование B -> Dummy
     
     
     
    MS VC++ 6.0 SP6    - ok, test(2)
    MC VC++ 2003 (7.1) - ok, test(2)
    MC VC++ 2005 (8.0) - ok, test(2)
     
    Мы имеем на этапе 1 преобразования одинакового уровня предпочтения - пользовательское,
    но цепочка для случая (2) короче. А это тоже учитывается. Если же заменить  
    operator short() на operator int() - то действительно неопределенность,  
    т.к. для случая (1) уходит продвижение.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 19:41 21-02-2007 | Исправлено: RedLord, 20:00 21-02-2007
    IUnknown777



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!
    У меня возникла такая проблема.
    Мне нужно архивировать файлы из командной строки.
    Я пользуюсь rar.exe из папки winrar,
    но он не понимает длинные имена файлов.(Documents and Settings)
    Что можно сделать?

    Всего записей: 212 | Зарегистр. 20-04-2006 | Отправлено: 19:48 21-02-2007 | Исправлено: IUnknown777, 19:49 21-02-2007
    Labutin



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    veronica b

    Цитата:
    Хорошо, я вечером посмотрю в книгах и завтра по утряне дам вам ответ, устраивает?

    Конечно.

    Всего записей: 935 | Зарегистр. 31-07-2001 | Отправлено: 19:53 21-02-2007
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    <удалено>
     
    Добавлено:
    RedLord

    Цитата:
    MS VC++ 6.0 SP6    - ok, test(2)
    MC VC++ 2003 (7.1) - ok, test(2)
    MC VC++ 2005 (8.0) - ok, test(2)  

    Однобокие компиллеры во втором случае =)... А Comeau и остальные ?

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 21:53 21-02-2007 | Исправлено: SaDFromSpb, 21:55 21-02-2007
    blackdevil

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, у меня очень важный вопрос к Вам!!! На лекциях я через каждые пол слова от преподавателя слышу стек да стек, а кроме того что это какая-то область памяти я ничего про него не знаю! Где можно почитать материалы о "физических принципах" работы компьютера? Хотелось бы узнать в общих чертах что и как работает, но главное - КАК УСТРОЕНА ПАМЯТЬ!? Еще хотелось бы узнать побольше про бинарную систему счисления. Если знаете литературу попроще (можно и для чайников) подскажите пожалуйста!!! Отдельное спасибо тем кто устроит краткий ликбез прямо тут )

    Всего записей: 216 | Зарегистр. 14-04-2006 | Отправлено: 22:43 21-02-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SaDFromSpb
     

    Цитата:
    А Comeau и остальные ?

     
    Intel C++ 8.1      - ok, call test(2)
    Comeau online test - fail, ambiguous call
     
    Похоже мелкомягкие компилеры действительно однобоки.
     
    Но Intel в обоих случаях пропускает, Comeau - нет.
    вопрос кто из них прав (вернее "правильнее" интерпретирует стандарт)

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 23:12 21-02-2007
    javaner

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вопрос по С++, нужно узнатъ GUID TCP/IP service провайдера на компе, для запуска игры DirectX(Lobby application). я сам С# программер и на С++ нужно решит одну задачу. в С# есть удобная функция ToString() приемяняемая ко всем объектам. Есть на С++ что нить такое, ну чтоб выдать на экран? Спасибо заранее.

    Всего записей: 128 | Зарегистр. 28-05-2003 | Отправлено: 00:08 22-02-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Labutin, вотя вам обещал

    Цитата:
     
    #include <iostream.h>
     
    int main()
    {
        int num;
     
        while(1)
        {
            cout << "Enter integer number: ";
            cin >> num;
     
            if(cin.good())
            {
                cin.ignore(10,'\n');
                break;
            }
     
            cin.clear();
            cout << "Invalid entered number\n";
            cin.ignore(10,'\n');
        }
     
        cout << "Entered valid number: " << num << endl;
     
        return 0;
    }
     

     
    Используя функцию cin.ignore(10,'\n') мы пропускаем максиум 10 символов, до симола '\n'. Остольное, я думаю, вам будет понятно.
     
    blackdevil

    Цитата:
    Отдельное спасибо тем кто устроит краткий ликбез прямо тут )  

    Ну, вы должны понять, что это невозможно. Вот вам ссылка, сдесь вы найдете свои ответы.
    http://forum.ru-board.com/topic.cgi?forum=93&topic=0563&start=0#lt

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 09:04 22-02-2007 | Исправлено: veronica b, 10:30 22-02-2007
    Sarge1978



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NNS
    Читаем МСДН:
    virtual BOOL OnCommand
    (
       WPARAM wParam,
       LPARAM lParam  
    );
    В LOWORD(wParam) находится id элемента, акселератора или пункта меню.
    В HIWORD(wParam) находится код действия (для меню 1, иначе 0).
    В lParam находится hwnd элемента (для меню или аксел-ра 0).
    В самой функции получаешь LPARAM и WPARAM.
     
    По большому счету можно и OnCommandRange использовать. Но это не есть гут. Все равно придется резервировать IDшники и их обрабатывать. В цикле создаешь Create-ом чекбоксы из диапазона ID и в функции обрабатываешь свичом эти ID... Для этого нужно знать их примерное количество.

    Всего записей: 134 | Зарегистр. 12-03-2005 | Отправлено: 11:14 22-02-2007 | Исправлено: Sarge1978, 11:44 22-02-2007
    Labutin



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    veronica b
    Огромное спасибо. Практически то, что нужно. Только вот если ввести, например, "1aa" (сначала цифры, потом символы), то ввод воспримется нормально. Хотелось бы и такие вещи отсекать.

    Всего записей: 935 | Зарегистр. 31-07-2001 | Отправлено: 11:33 22-02-2007
    Sarge1978



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли менять вид окна Properties (MFC)? Например, кнопка Help у меня должна находиться не справа, а слева?
     
    Придумал. Унаследовавшись от CPropertySheet:
     
    Подробнее...

    Всего записей: 134 | Зарегистр. 12-03-2005 | Отправлено: 12:54 22-02-2007 | Исправлено: Sarge1978, 15:59 22-02-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    RedLord
    На счёт второго примера. Не уверен, нужно заглянуть в стандарт, но ИМХО тут Comeau неправ. Второе пользовательское кастование даёт сразу нужный тип, а первое - нет, поэтому дальнейшее продвижение просто не рассматривается, и в результате остаётся всего один кандидат. Отличие от первого случая здесь в том, что оба пользовательских кастования объявлены в одной области видимости - классе B, поэтому перегрузки просто нет - кастование в short не рассматривается, ибо кастование в Dummy есть точное соответствие. В первом примере пользовательские кастования принадлежали разным областям видимости - одна в классе A, другая в B, поэтому рассматривалась именно перегрузка. Но ещё раз говорю, нужно свериться со стандартом.
    Сам подумай, а если у меня в классе перегружаются и operator short(), и operator int(), они разве обязательно будут конфликтовать? А ведь второй из первого всегда можно получить продвижением.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 13:28 22-02-2007 | Исправлено: Qraizer, 13:39 22-02-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
     
     

    Цитата:
     
    в классе перегружаются и operator short(), и operator int(), они разве обязательно будут конфликтовать? А ведь второй из первого всегда можно получить продвижением.

     
    operator short(), и operator int() не будут конфликтовать. они будут вызывать неоднозначность перегрузки в некоторых случаях
     
    struct B  
    {
        operator short()
        {
            return 1;
        }    
        operator int()
        {
            return 0;
        }    
    };
     
    void test(int) // (1)
    {
    }
     
    void test(short) // (2)
    {
        
    }
    int main()  
    {
        B x;
        test(x); // неоднозначность вызова
        return 0;
    }
     

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 16:31 22-02-2007 | Исправлено: RedLord, 16:32 22-02-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    Спасибо. Вопрос снят.
    Comaeu в данном случае прав.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 01:43 23-02-2007 | Исправлено: RedLord, 01:43 23-02-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Стукни пунктом стандарта, плз. А то так руки и не дошли самому посмотреть...
     
    Добавлено:

    Цитата:
    ...они будут вызывать неоднозначность перегрузки в некоторых случаях...
    Как раз это я и имел в виду. То, что ты тут написал - это неопределённость в чистейшем первородном виде. Даже я б не смог выбрать, не то что компилятор. В предыдущем примере было не так. Но... Если убрать одну из test(), вопроса от том, какой operator XXX() юзать, у компилятора не возникнет. Потому что будет точное соответствие. И следовательно перегрузки просто нет, ибо изначально всего один кандидат.
    Поэтому я настаиваю на ошибочности поведения Comeau, пока стандарт меня не разубедит.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 16:27 23-02-2007 | Исправлено: Qraizer, 16:41 23-02-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    я списался со Стивом Адамчиком("Mr. Overloading") из EDG
     
    вот его ответ по первому примеру:
     
    The correct answer is "ambiguous call".  Given two conversions that  
    involve different
    user-defined conversion functions/constructors, there is no reason to  
    prefer one over the other.
     
    и длина цепочки не учитывается. она начала бы играть роль например в таком случае
    B->A->int
    B->A
    а у меня было пользовательское преобразование
    B -> short
    B-> A
     и выходит - неопределенность. и не имеет значения,что цепочки разной длины (на этом я и провалился). в стандарте это пункт §13.2.2.2/3
     
     
    Добавлено:
    и для второго примера имеем два пользовательских преобразования с различными типами.
    B -> short  
    B -> Dummy
     и выходит, что этого достаточно, для неопределенности. и не важно точное соотвествие или нет
     
    Добавлено:
     
    здесь hххp://tinyurl.com/502f лежит объяснение сильного хода Александреску, основанного на перегрузке. думаю, это тоже интересно будет почитать

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 17:40 23-02-2007 | Исправлено: RedLord, 17:54 23-02-2007
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RedLord
    Меня заинтересовал EDG. Только я не совсем точно понял, чем они занимаются.
    Создают какой-то офигенно крутой препроцессор для исходников, который могут использовать создатели компиляторов?

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 18:18 23-02-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru