К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Что-то кисло у вас. Закидаем нуба помидорами! ;)

Гость
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/
)


К списку вопросов






Copyright ©, Все права защищены