Перейти к содержанию

Antonshka

Пользователи+
  • Публикаций

    96
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Antonshka стал победителем дня 29 марта

Antonshka имел наиболее популярный контент!

Репутация

24 Novice

Информация о Antonshka

  • Звание
    Продвинутый пользователь

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Antonshka

    [URLdrafter.exe]

    Я изучаю с++ уже второй месяц, но написать такой программы как у тебя пока не могу. Даже и не имею представления о том как это сделать. Может это от того, что я решил сперва освоить самые основы. На данный момент мною прочитана книга Лафоре, и начата книга "с++ Primer" (~300 страниц из 1124). Книга Лафоре имеет замечательную постепенность преподавания материала, забегания вперед практически нет. Читается на одном дыхании. "с++ Primer" в этом плане не такова, но её материал более концентрирован, нет отклонений ни направо ни налево, все строго и без единого лишнего слова. "с++ Primer" нужно читать после Лафоре.
  2. Antonshka

    [URLdrafter.exe]

    Привет, меня заинтересовал тот факт, что приложение написано на с++. Расскажи о своем пути изучения этого языка. - как давно началось твоё изучение этого языка? - сколько материала было прочитано, сколько книг? - обучаешься в училище? - посоветуешь книги по с++? - какая часть языка была самая труднопонимаемая? Также, отчего 64 битная версия не выйдет в ближайшее время?
  3. А, всё, разобрался. Объявление переменной не пропускается. Так как case не создает здесь свою область, но сам он (case) находится в области switch, то значит и это объявление переменной также находится в области switch и не относится к case. Значит инициализации и объявления переменных всех case-s (case-s не имеющих свою собственную область) также находятся в области switch, в начале. А инициализировать переменную в последней метки case оператора switch, допускается потому, что эта метка не может быть пропущена (хотя в тоже время может и не выполниться). int value = 123; switch (value) { case 1: case 2: int ival_2 = 8; // допускается компилятором. Не однозначности нет }
  4. О, спасибо тебе, как же я долго искал этот ответ. Спасибо всем кто откликнулся. Итог сообщенных мне, ваших знаний - переменные объявляются и переменные инициализируются во время сборки - переменные во время сборки распределяются на две секции: секция для инициализированных, и секция для не инициализированных. - при распределении переменных во время сборки на секции не допускается неоднозначность, то есть не допускается в коде возможный пропуск выражения инициализации переменной. Компилятор в таком случае не будет точно знать в какую секцию поместить переменную, так как она может быть и инициализированной, (в случае если не будет её пропуска) и не инициализированной (в случае её пропуска). int value = 0; Switch (value) { case 1: // возможен пропуск int v1 = 123; // неоднозначная ситуация, не допускается. Компилятор придет в замешательство во время сборки, пытаясь определить секцию int v2; //допускается такое объявление, так как оно выполняется всегда, во время сборки, независимо от возможного пропуска int v3; case 2: // возможен пропуск int v4 = 123; // неоднозначная ситуация, не допускается. Компилятор придет в замешательство во время сборки, пытаясь определить секцию int v5; //допускается такое объявление, так как оно выполняется всегда, во время сборки, независимо от возможного пропуска v2 = 789; // допускается присвоение, так как v2 объявлена выше/раньше, во время сборки int v3; // не допускается, так как в одной области видимости (область Switch в данном случае) нельзя иметь переменные с одинаковым именем case 3: // пропуска быть не может, так как это последняя метка оператора Switch, неоднозначности нет int v6 = 123; //допускается, так как копмилятор точно уверен, в какую секцию определить переменную }
  5. Значит ли из написанного тобою, что компилятору не важно, что пропускается объявление переменной someval в case 1, так как он уже знает что такое someval, ведь он узнал о ней еще во время сборки, и поэтому компилятору допускается в case 2 выполнить присвоение someval = 1 ?
  6. На других сайтах я видел подобные ответы, именно, что так нельзя писать, а вот так можно. И спасибо тебе и им за такие ответы. Но я бы еще хотел понять причину этого разрешения и запрещения. Понять не ради любопытства, а ради самого понимания. Продолжаю искать ответ...
  7. Начало Switch исполняется всегда? Не зависимо от значения PARAM в выражении Switch(PARAM) ? Если исполняется всегда, и если переменные находятся не в case, но в начале Switch, то почему не выполняется инициализация переменной в этом начале, так же, как выполняется объявление? Почему в начале это выполняется int someval; а это нет int someval = 12345; Подскажи пожалуйста.
  8. Спасибо, просмотрел, это все мне уже известно, но почему-то от этого я все равно не понимаю решения вопроса темы. Вот какие мои мысли пока что в коде ниже, Switch имеет свою область видимости А, и int ival_1 = 1; имеет свою область видимости Б. Теперь ival_1 невидима в области А совсем. Это значит, что и проблемы из-за её пропуска также теперь нет совсем. Switch(value) { // Область А начало case 1: { //Область Б начало int ival_1 = 1; } //Область Б конец } // Область А конец Если это так, то это мне теперь понятно. Остались непонятны другие вопросы описанные в начале темы. Наример
  9. Switch(выражение) { область видимости для Switch } Ты не эту область видимости имел ввиду? Если не трудно, объясни поподробнее то, что ты знаешь об этом вопросе. Я перерыл интернет, был на сайтах, на оф. сайтах, в разных книгах, - нигде нет понятного для меня ответа, но везде говорят как-бы на другом, понятном только для них самих языке.
  10. Привет всем, знающие люди, помогите понять причину следующей ситуации, отнявшей у меня несколько часов безрезультатного интернет поиска (результаты были, но я из них ничего не понял) Не понятно почему в case 1 нельзя писать int ival_1 = 1; но можно писать int ival_1; Объяснение из книги, - "в случае если value не будет равно 1, то будет пропущена метка case 1, следовательно и инициализация переменной ival_1 также будет пропущена." Но ведь если пропускается метка case 1, то тогда зачем и заботится об инициализации ival_1? Вот что более всего непонятно - почему в case 1, вместо int ival_1 = 1 допускается написать int ival_1; а затем использовать эту int ival_1 в case 2 (например ival_1 = 456), ведь согласно логике в случае пропуска метки case 1, переменная ival_1 в выражении ival_1 = 456 будет не объявлена прежде. - почему таким образом допускается писать код
  11. Antonshka

    C++ конструктор

    В конце книги Лафоре есть ответы на некоторые его задачи. Есть ответ и на эту задачу. Вот (нерабочий) ответ, из оригинала книги Непонятно почему в этом скрипте вызывается конструктор базового класса из тела конструктора производного класса. @JustHack Понятно, но в списке инициализации нельзя выполнить какое-либо условие (а оно должно быть в этой задаче), потому видимо вызов конструктора базового класса и был перенесен в тело конструктора. В интернете нашел еще такое решение, вместо вызова конструктора else //not too long, String(s); использовать уже непосредственно саму функцию того конструктора else //not too long, strcpy_s(str, s);
  12. Antonshka

    C++ конструктор

    Привет всем, кто-нибудь из вас сталкивался с ошибкой компилятора ""error C2082: переопределение формального параметра "pstr"? скрипт если вместо Pstring(const char pstr[]) { String(pstr); } записать Pstring(const char pstr[]) : String(pstr) { } то ошибки нет. Решение проблемы взятое из Microsoft Docs - В теле функции переопределен формальный параметр функции. Чтобы устранить эту ошибку, удалите повторное определение. void func(int i) { int i; // C2082 int ii; // OK } Никак не могу найти причину. Ведь я вызываю конструктор с одним параметром класса String, и передаю ему аргумент pstr. Как правильно вызвать конструктор String, из тела конструктора Pstring, передав ему при этом параметр pstr?
  13. Antonshka

    Небольшой опрос по блогу

    Читая эти книги, используешь сколько-нибудь переводчик?
  14. Antonshka

    Небольшой опрос по блогу

    У меня есть большое желание освоить программирование, и освоить его настолько профессионально, насколько это возможно. Спасибо за ответ, я читал его с большим интересом.
  15. Antonshka

    Небольшой опрос по блогу

    От тебя я хотел бы увидеть статью/статьи, в которой рассказывается: - о твоей мотивации программирования - о твоем стаже программирования - какие книги по программированию ты изучал - какие книги показались сложными, какие бесполезными - какие книги ты бы посоветовал изучать, и в каком порядке - какой язык программирования тебе нравится больше и почему - какой язык программирования для тебя самый сложный - отзыв об учреждении в котором обучался, об объеме и пользе знаний которые там приобрел
×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.