Приветствуем на Форум Херсона. Форум Херсонской молодежи.. На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру! Если возникнут проблемы с регистрацией напишите нам. |
|
Программирование Все вопросы по написанию программ |
Просмотр темы (Новые вначале) |
23.01.2009 20:07 | ||
Lester | это единственный платформенно-зависимый макрос в моем тулките - точка входа, все остальные привязки к ОС вынесены в отдельные библиотеки, в которых реализуется интерфейс I_Core | |
23.01.2009 19:52 | ||
zwitter |
Цитата:
реквестирую какао и карбон! |
|
14.01.2009 07:13 | ||
Lester |
( не могу создавать новую тему - приходится писать где попало ) вопрос людям пишущим для windows( я больше по ...nix ), почему такая ерунда получается: Код:
int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { argused3( hInstance, hPrevInstance, nCmdShow ); InitArgs( (wchar_t*) lpCmdLine ); ... } пробовал точку входа int main( int argc, char **argv ) - argv так же всегда NULL, собирал в VC++ 2008 Lester добавил 14.01.2009 в 08:27 разобрался - проблема во флагах линковщика |
|
09.01.2009 14:01 | ||
TIGR |
вот в продолжение темы инетерсная статейка )) http://www.unixwiz.net/techtips/reading-cdecl.html |
|
23.11.2008 09:30 | ||
Робот Вертер |
ПРОДАНО! Мальчику в тигровой шапке =) |
|
23.11.2008 09:10 | ||
Marchello | Больше и не нада, 6 - это правильно! | |
23.11.2008 07:55 | ||
ustas | шесть раз! шесть два! кто больше господа! шесть... | |
23.11.2008 00:06 | ||
TIGR | ........6 | |
23.11.2008 00:02 | ||
Marchello |
Нет, не 5. Завтра расскажу |
|
22.11.2008 22:02 | ||
Aurum |
Код:
char A[6] = {'1', '2', '3', '4', '5', '6'}; short *pA = (short*)A; char* p = (char*)(++pA); std::cout << *(&(p[2]) + 1); |
|
20.11.2008 20:47 | ||
Робот Вертер |
почему 2? [2] означает 2 экземпляра?? видимо этот кусок кода я не до конца понял - поэтому и ошибка вышла я как и Тигр в Си тоже не силен. Синтатксис помню очень плохо. Робот Вертер добавил 20.11.2008 в 21:58 ужас глюкавых кодов нам тут напредлагал =) |
|
20.11.2008 18:28 | ||
Marchello |
Оба варианта не правильны (причем от правильного довольно далековасто) Marchello добавил 20.11.2008 в 19:46 Думаю программеров у нас не так много, поэтому расскажу как правильно. На самом деле должно быть 9. Проанализируем. первая итерация цикла: - создаем два инстанса класса Foo, соответственно имеем 2 вызова конструктора, count уже 2. - сдвиг, count == 4 - удаление, тут тонкость. Если мы создаем массив (в данном случае 2 элемента), то удалять его нужно как delete [] A, поэтому в нашем случае удалится только первый элемент массива, тут count - 1 == 3. (тут могу поподробней рассказать ) вторая итерация, тут по тем же шагам: - еще два инстанса, count был 3 стал 5. - сдвиг, 5 << 1 == 10 - удаляем снова первый элемент, 10 - 1 == 9 И того имеем еще утечку памяти для 2-ух инстансов класса Foo. |
|
20.11.2008 13:38 | ||
TIGR |
Цитата:
к сожалению плюсы очень плохо знаю, поэтому возможно полное понимание "друзей" в с++ не определю, но такое вообще в джаве есть дружественные классы, методы позволяет доступ к свойствам напрямую давать другим классам находящимся в одном пакете. вроде по сути одно и тоже.. зы со всем согласен что говорит марчело - плюсы дают хорошую базу того что происходит ... сужу не по себе )) |
|
20.11.2008 12:36 | ||
Робот Вертер |
3 вроде че 2? первый проход цикла +1 = 1 сдвиг до 2 -1 = 1 второй проход цикла +1 = 2 сдвиг до 4 -1 = 3 |
|
20.11.2008 12:19 | ||
pingwinator |
Цитата:
|
|
20.11.2008 09:00 | ||
Marchello |
Цитата:
то есть 3 << 1 == 6; 4 << 1 == 8. А почему это статику делается delete ? delete делается указателю А, а этот статик тут не причем (именно при удалении памяти). Он как бы имеет отношение к удалению но только через деструктор класса Foo. Поэтому count никак не убьется. Думаем дальше Marchello добавил 20.11.2008 в 10:52 Вот, кстати, еще примерчик. Тут никакого ООП, просто на понимание указателей: Код:
char A[6] = {'1', '2', '3', '4', '5', '6'}; short *pA = (short*)A; char* p = (char*)(++pA); std::cout << *(&(p[2]) + 1); Почему так, потому что С++ сочетает в себе всю низкоуровневость С - это указатели, ссылки, работа с памятью, а также имеет очень мощную ООП модель, которой могут похвастаться далеко не все языки. Это включая множественное наследование (...и классов тоже), виртуальное наследование, friends - чего нет в том же .NET (С#) и помоему в Java (тут Тигр нам подскажет), хотя эти языки считаются полностью ООП. Также в С++ можно использовать как ООП так и процедурное П, причем все в купе. В общем, хорошо зная С++ - выучить другой язык не составит труда абсолютно. При чем вы возможно будете разбираться в тонкостях нового языка еще лучше чем те которые изначально учили только этот язык. (например зная механизм указателей и понятие heap в С++ - некоторые вещи в С# понимаются на автомате). |
|
19.11.2008 21:42 | ||
pingwinator |
Цитата:
хм, а статик можно делать делейт? там поидее каунт убить должно, но память не освободит... |
|
19.11.2008 21:32 | ||
Marchello |
А вот тоже примерчик. Правда тут без подвохов, на чистое знание. Был у нас в тестах, и на собеседовании я его давал, и у всех были разные ответы Код:
static int count = 0; class Foo { public: Foo() { count++; } ~Foo() { count--; } }; void main() { for (int i = 0; i < 2; i++) { Foo *A = new Foo[2]; count <<= 1; try { delete A; } catch(...) { } } std::cout << count; // ? } Ответ аргументировать. (Желательно не открывать компилятор, пример устный ) |
|
19.11.2008 20:21 | ||
pingwinator |
Цитата:
|
|
19.11.2008 20:19 | ||
Marchello |
Кхм.. мда. Ну с первого взгляда видно что будет 100 раз (не считая первую строку). Но так как подвох же должен быть, то я открыл компилятор... Весь прикол в комментарии. Верней даже в его концовке, а именно: "??/". Опытным путем было установлено что ASCII код для '??/' и для '\' - одинаков. Тут уже я все понял )) Чуть позже нашел в МСДНе такую фигню как триграфы. Так и есть, '??/' == '\' Ну а '\' - просто говорит о том что строка ниже является продолжением строки выше. То есть, по сути коммент распространяется и на цикл, который не выполняется, и в итоге получаем 10 раз (Это можно наблюдать если включить генерацию файла после препроцессинга). |
|
19.11.2008 19:38 | ||
pingwinator |
Hello World! Сколько раз на экране появится заветная фраза при выполнении этой программы? Код:
#include <iostream> int main(int argc, char* argv[]) { int i = 10; std::cout<<"Hello World!"<<std::endl; // Сколько раз??? while(i--) { // Сколько раз будет вызвана эта строка???/ for(int j=0; j<10; j++) std::cout<<"Hello World!"<<std::endl; } return 0; } ЗЫ - те кто попал под мою дневную рассылку прошу не отвечать |