0
- 15.12.2015 - 20:55
|
В общем, занялся я тут изучением С++. Просто интересно стало. Читаю хорошую книгу, пока что самую понятную из всех, что я читал. Роберт Лафор(э). Объектно-ориентированное программирование. Всё круто структурировано в книге, поэтапно, с примерами. Короче, класс. Но! По ходу возникают вопросы, которые в книге не раскрываются и гугл не помогает. Ниже начну накидывать их, а вы, если не трудно, подскажите ламеру, что да как, окей? ;) Ну, флуд, естественно, приветствуется тут как нигде! ))) И так, помидоры, надеюсь, на готове? поехали! ))) | |
1
- 15.12.2015 - 20:59
|
Вот пример из книги. --------------------- // while4.cpp // возведение в четвертую степень целых чисел #include <iostream> #include <iomanip> // для setw using namespace std; int main() ** int pow = 1; // первое возводимое число равно 1 int numb = 1; // 1 в 4-й степени равна 1 while(pow < 10000) // цикл, пока в степени не более 4 цифр ** cout << setw(2) << numb; // вывод числа cout << setw(5) << pow << endl; // и его 4-й степени ++numb; // инкремент текущего числа pow = numb * numb * numb * numb; // вычисление 4-й степени ** cout << endl; return 0; ** -------------------- В начале были обозначены 2 переменные "pow" и "numb". Им было присвоено значение "1". Важно ли тут это значение? То есть, если я просто обозначу "pow" и "numb" как переменные типа int, без присвоения какого-либо значения, будет ли всё работать? И для чего вообще в этом примере были присвоены значения "1"? | |
2
- 15.12.2015 - 21:08
| И вот еще один вопрос. Использую среду Code Blocks. Есть такая функция exit(), которая относится к "директиве процессора" (если я правильно понял терминологию) #include <iomanip>. Короче, все программы, которые используются в книге в качестве примеров и в которых используется функция exit(), не работают. Код Блокс пишет внизу, что эта функция не определена и не относится ни к чему. Это проблема Код Блокс или что это за дрянь такая? :) | |
3
- 15.12.2015 - 23:39
|
Тут не кисло, тут все давно умерло! Можешь глянуть на http://www.sql.ru/forum 1) Если переменные не проиницилизированны, то в зависимости от того что это за переменные и где они объявлены там в лучшем случае будет 0, а иначе некий мусор. Вот и представь как при этом отработает эта программа, например, если pow и numb будут изначально равны 0, или например, pow будет равен изначально 10000, сколько тогда циклов будет выполнено. 2) Читай хелп или гугли) этот exit() нужен для завершения программы и возврата некого кода, например 0 если нет ошибок и чего-то отличного от 0, если есть. Внутри функции main вместо exit(n) можно использовать return n И этот exit находится в stdlib | |
4
- 16.12.2015 - 07:35
| 3-Wake Me Up > спасибо, дружище. По первому что-то проясняется, но слабо. :) а по поводу exit, я так и поступил в итоге. Заменил на return и всё заработало. | |
5
- 21.12.2015 - 19:03
|
В общем, по мере прохождения джунглей С++ возник вопрос, касаемо функций. Сначала элементарный спрошу, потом, если не разберусь, еще раз спрошу! :) Пример --------------------------------------- void someFunc(int); // прототип функции main ** ***** someFunk(n) // вызов функции return 0; ** void someFunc(n) // сама функция ** **** // тело функции return n; ** --------------------------------------- main ** void someFunc(int); // прототип функции ***** someFunk(n) // вызов функции return 0; ** void someFunc(n) // сама функция ** **** // тело функции return n; ** --------------------------------------- Разница, собственно, в том, что в первом примере прототип определяется ВСЕ функции main, а во втором случае ВНУТРИ функции main. Имеет ли это какое-то значение? Если прототип будет снаружи мейн, всё работает, я проверял. но не могу понять, почему в примере из учебника именно так. Там не пояснили. :( | |
6
- 21.12.2015 - 19:03
| Фигурные скобки не отобразились. Чё за лажа*? | |
7
- 22.12.2015 - 17:37
|
Какую-то странную книгу вы читаете. Нормально не расписано и еще учат плохому) Про прототипы можете почитать это http://cppstudio.com/post/404/ а затем это про неявное объявление функции https://ru.wikipedia.org/wiki/%D0%9F...86%D0%B8%D0%B8 Не знаю мне никогда не приходила идея объявить прототип функции внутри main ) Очевидно, разница будет в области видимости, если такое вообще сработает (на работе я использую довольно специфический C). Попробуйте между функциями main и someFunc написать функцию someFunc2, которая обращается к someFunc, а также добавьте вызов someFunc2 в main и прототип someFunc2 перед main и посмотрите как все это будет работать при объявлении прототипа someFunc перед функцией main и внутри main. И да, не опускайте имена переменных в прототипе - так потом будет легче жить и вам и тем кто будет править ваш код после вас. | |
8
- 22.12.2015 - 20:09
|
А вот насчёт этих имён переменных вообще вопрос у меня серьёзный. Я, объявляя прототип, скажем, такой ф-ции int someFunc(int); и int someFunc(int a); эта самая "а" является переменной, видимой внутри только этой функции? Или же эта "а" должна уже быть объявлена в main, что бы someFunc с ней работала? И еще разъясни пожалуйста, int(возвращаемое?) someFunc(int(получаемое?) a) То есть первое инт - это то, что функция должа вернуть? А внутри скобки - то, что должна получить, чтобы что-то с этой переменной "а" сделать внутри? Я правильно понимаю синтаксис? | |
9
- 22.12.2015 - 22:09
|
8-newNick >Почитайте про область видимости, например, это http://citforum.ru/programming/c/h16.shtml а также про варианты передачи параметров в функцию, по значению, указателю, ссылке | |
10
- 26.12.2015 - 12:39
|
С++ ожил на этом форуме!!! Слава Высшему Разуму! :) | |
11
- 26.12.2015 - 20:09
| Правильно ли я понимаю, что конструктор класса является неким дефолтным значением для каждого нового объекта класса, который я создаю? То есть в конструкторе я указывю некоторые стартовые значия, от которых пойдет потом вся тема? | |
12
- 27.12.2015 - 10:55
| 8-newNick >11-newNick > чел, ты прикалываешься? :) | |
13
- 27.12.2015 - 12:26
| 12-Нас не забанить > Нет. А почему ты спрашиваешь? | |
14
- 27.12.2015 - 18:50
|
13-newNick > Вопросы сильно "наивные". Ты до начала "изучения С++" программировал на чем-либо? Такие элементарные вещи, как "область видимости", "параметры" и "возвращаемое значение" (в №8), много где есть, не только в С++. | |
15
- 27.12.2015 - 18:54
|
5-newNick > Нельзя объявлять прототип функции внутри другой функции. Прототип нужен компилятору только в том случае, если определение функции идет либо после ее вызова (вниз по коду), либо оно вообще в другом модуле. | |
16
- 27.12.2015 - 20:06
|
14-Нас не забанить > Нет, до изучения С++ ни на чём не программировал, поэтому такие "элементарные" вещи и спрашиваю. Собственно, название темы говорит само за себя. Можешь закидать нуба помидорами. Если от этого тебе станет лучше, буду очень за тебя рад, честно. А если ответом дельным поможешь, то вообще +500 тебе в карму! Я в курсе про сложность С++, про то, что лучше начинать с другого, что полегче, что "ногу при программировании на С++ можно отстрелить", уже понял, но начал с него, и перекидывать внимание на что-то другое пока не хочу. Ресурсов много где есть тоже знаю, но тут, вроде как, "роднее" что ли. Посему в гугл и на сайберфорум тоже посылать не надо. Формат "вопрос - ответ" намного информативнее и веселее :). Кто захочет ответить, ответит, нет, бросайте помидоры. | |
17
- 27.12.2015 - 20:13
|
16-newNick > Хорош тебе причитать про помидоры, не собираюсь я ничего ни в кого кидать. :) Просто вопросов по С++ как бы ОЧЕНЬ много, но если совсем элементарные будешь спрашивать - жизни не хватит все тут объяснить. :) Почитай книгу С++ для начинающих какую-нить, до ООП позже дойдешь. :) Какой у тебя вопрос? | |
18
- 27.12.2015 - 22:38
|
Простыми словами про конструктор класса. Я так понял, что эта штука создана для того, что бы инициализировать объекты класса в момент их создания. То есть существует конструктор по умолчанию, который всем полям класса изначально присваивает 0. Так? А я могу создать еще конструктор, указав в нём предварительно поля класса, которые смогу в main указать при создании объекта класса. То есть верно ли утверждение, что конструктор класса образно можно назвать прототипом метода класса, не требующего написания тела? Спиной понимаю что определение не верное, но чисто для понимания пытаюсь какие-то аналогии с уже знакомыми вещами проводить. | |
19
- 27.12.2015 - 23:31
|
18-newNick > 1. То есть существует конструктор по умолчанию, который всем полям класса изначально присваивает 0 Нет, в С++ такого нет явно, и тут есть некоторая путаница, к сожалению (из-за исторического наследия, возможно перфоманс и т.д.). Точнее, конструктор по умолчанию есть, но он не для всех типов вызывается - например для встроенных типов (int, bool и т.п.) не вызывается. :) Но для них можно его вызвать явно - тогда будет инициализация нулем. 2. То есть верно ли утверждение, что конструктор класса образно можно назвать прототипом метода класса, не требующего написания тела? Вот тут не понял. :) Считай конструктор просто специальным методом, который вызывается при создании объекта. А написать в нем ты волен что угодно, но по умолчанию он мало что делает. | |
20
- 28.12.2015 - 08:07
| 19-Нас не забанить > спасибо. То есть конструктор будет именно конструктором до тех пор, пока я не начну писать тело. Инициализирую переменные именно как construct(int a, int b) : a(0), b(0) ****. Образно говоря... | |
21
- 28.12.2015 - 23:46
|
20-newNick > Да не, конструктор будет конструктором в любом случае (формально). :) А вот что и как он будет делать - зависит от того, будешь ты его писать сам или нет. Если будешь - то уж все в твоих руках. | |
22
- 02.01.2016 - 08:35
| Я вот чего не могу понять. Есть класс А и есть класс В. могу ли я создавать объекты класса В в привате класса А и применять к объектам класса В методы класса В? Я что-то бьюсь над этим, но ничего не работает. Короче, нужно внутри класса А работать с объетами класса В без всяких ограничений. Возможно? | |
23
- 02.01.2016 - 21:57
| Возможно. Затупил, как обычно, на ровном месте. Все возможно, все работает. Разобрался. | |
24
- 08.01.2016 - 12:41
| С объектами класса можно работать без ограничений из любого места через его публичный интерфейс. :) | |
25
- 10.01.2016 - 00:43
| 24-Максыч > С объектами да, но я подумал, что проблемы возникли из-за того, что, получается, другой класс, как бы обращается в приват не свой. Оказывается, не так я понял как всё работает, но разобрался. Открыл для себя наследование классов и теперь вообще легче станет жить :) | |
26
- 10.01.2016 - 15:32
| 25-newNick >Главное с наследованием не переборщить, а то потом фиг разберешься что там творится. Вообще после того как освоишь основы ООП рекомендую почитать книжку по паттернам. | |
27
- 10.01.2016 - 19:41
|
26-Wake Me Up > Спасибо. Почитаю. Только вот по наследованию вопрос есть. Есть 2 варианта доступа к переменным родительского класса, точнее 2 варианта объявления, что ли. private и protected. Можете по-простому разъяснить что есть что? Потому как в одном примере из учебника всё работало только применяя способ протектед, а в другом примере и приват нормально себя вёл. | |
28
- 11.01.2016 - 01:25
|
Если кратко: Public — доступ открыт всем, кто видит определение данного класса. Private — доступ открыт самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса, как функциям, так и классам. Protected — доступ открыт классам, производным от данного. | |
29
- 12.01.2016 - 19:06
|
28-Wake Me Up > спасибо. То что надо )) Слушайте, а ткните носом меня, где можно узнать больше о создании интерфейса. Хочу посмотреть хотя бы в общих чертах как это делается. Нет, не хотя бы, а на данный момент именно в общих чертах. Пока слышал только о qt, но мне интересно, а есть ли что-то более нативное, типа делфи, только плюсы :) | |
30
- 12.01.2016 - 19:12
| Не, я понимаю, что есть гугл, но, может, вы уже изучали конкретные вещи и подкинете хороший ресурс по этой теме ;) | |
31
- 13.01.2016 - 23:21
|
29-newNick > Типа Дельфи был Borland Builder, но его уже кажется нет. Да и под Винду сложные интерфейсы становится модным писать на WPF-ах всяких. Но там тоже "типа С++" можно использовать, managed. | |
32
- 14.01.2016 - 00:34
|
31-Максыч >Добавлю что delphi как и bilder еще таки живы и развиваются https://www.embarcadero.com/ru/products/delphi https://www.embarcadero.com/ru/products/cbuilder 30-newNick >Еще есть wxWidgets, но Qt будет получше. | |
33
- 14.01.2016 - 16:16
| Понятно. То есть вот как в делфи не получится в qt кнопочки на интерфейс кидать, верно? Я в ютубе посмотрел и так понял, что только код писать. На самом деле кажется, что не сложно. Как-нибудь поковыряю. | |
34
- 15.01.2016 - 08:33
| 33-newNick > По-моему, да. | |
35
- 16.01.2016 - 10:18
| Слушайте, ребят, а рассккжите, где можно найти реальные задачи, которые решает программист. То есть, может существуют какие-нибудь проекты, над которыми любой желающий может потрудиться, внести свою лепту, так сказать. А это значит, что есть исходник в открытом доступе, который можно почитать, покумекать, внести изменения, потренироваться в этом во всём. Буду очень благодарен. | |
36
- 16.01.2016 - 12:01
| 35-newNick > Ты опять издеваешься? :)) | |
37
- 16.01.2016 - 12:55
|
36-Максыч > А то!! )) не, дружище, вот я на данный момент работаю в сфере энергетики. Теплоэнергетика, если быть точнее. Я знаю где нарыть грамотных инженеров для получения ответов на свои вопросы. И если, например, кто-то из моих знакомых захочет как-то въехать в эту тему, я скажу ему к кому идти, дабы получить работу, знания и так далее, потому что я знаю. У меня в этой сфере знакомые в конце концов :) Так же и по дизайну. Я 9 лет интерьеры делал, софтом владею, где и что купить знаю, кто где и как работает, сколько стоит и можно ди у этого человека чему научиться. А в айти я вообще хз кто где и что делает. Кого спрашивать — без понятия, куда можно прийти за ответами — без понятия, что такое клавиатура тоже не знаю ))) Ты пойми, я уже старый, круг общения устоявшийся, в жизни мало чего добился. Но если сегодня(имею ввиду в обозримом будущем) не определюсь, будет плохо. Поскольку я уже больше месяца уделил обучению чему-то, то значит, это надолго. А без общения с людьми из отрасли ты мало чего поймёшь. Поэтому, ты не думай, что я прикалываюсь, издеваюсь или вообще дурак. Хотя, насчет последнего, надо еще подумать )) просто наш местный форум — единственное место, где можно ближе ознакомиться с интересующей тебя темой в рамках краснодара. | |
38
- 17.01.2016 - 10:16
|
37-newNick > Хватит прибедняться. ;) В рамках Краснодара как-то всё печально, мне кажется.. Тем более в плане С++. :( А по твоему вопросу - погугли например Линукс. Или boost. :) | |
39
- 18.01.2016 - 03:14
|
37-newNick >Место выбрал так себе, вот лет 10-14 назад, тут было живенько;)) 35-newNick >Смотри open source. Там и на кошечках можно потренироваться. А с учетом твоего уклона в энергетику можешь глянуть на http://oscada.org/ru/glavnaja/ ) | |
| Интернет-форум Краснодарского края и Краснодара |