Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.92
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
#1

Посоветуйте новичку в С++ - C++

31.07.2011, 17:04. Просмотров 7396. Ответов 126
Метки нет (Все метки)

Здравствуйте!
После школьной программы знаком с основами Паскаля, Делфи. Скоро поступлю в ВУЗ. Скорей всего буду изучать там С++. Решил немного подготовиться.
Скачал книгу Либерти (21 день).
Сейчас остановился на девятом дне. "Прошел" указатели и ссылки. Возникают большие трудности при использовании указателей и ссылок в классах. Утечки, нулевые объекты, мины замедленного действия, одним словом остались для меня непонятными.
Во-первых мне интересно - я виноват? Или это тяжелые темы для всех? Сколько вы потратили дней, чтобы полностью разобраться в этих темах? Вся сложность в них в том, что надо понимать, как записывается информация, где хранится, когда будет запускаться конструктор, copy конструктор, деструктор. Как надо использовать функции чтобы не запускать copy конструктор.
Во-вторых я хочу спросить, а надо ли мне новичку, знакомым с С++ 7 дней, разбираться в таких, как мне кажется профессиональных вещах? Может можноо обратиться к ним позже? Или дальше без этих тем не уедешь?
Тоесть основной вопрос: если остались непонятки в этих темах, можно изучать дальше, а потом вернуться к ним? Или лучше сейчас все понять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2011, 17:04     Посоветуйте новичку в С++
Посмотрите здесь:

Поясните новичку C++
C++ Посоветуйте новичку порядок действий
C++ Поясните новичку!
C++ посоветуйте новичку в С++
Ответьте новичку C++
Литература Новичку C++
C++ Подскажите новичку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
05.08.2011, 09:28     Посоветуйте новичку в С++ #41
Цитата Сообщение от Domenick Посмотреть сообщение
т е ты хочешь сказать при создании экземпляра класса (конструктор) не испольузется указатель? если нет, то где оно хранится все? и как к этому обратиться? а диструктор освобождает место по указателю, разве нет?
используется неявно. Компилятор каждый раз засовывает в стек или в один из регистров указатель, который потом используется в теле конструктора, деструктора или нестатического метода как this. Но чтобы писать хорошие программы, такие подробности знать не нужно. Только для расширения кругозора или крекинга

Добавлено через 2 минуты
Цитата Сообщение от Domenick Посмотреть сообщение
да даже банальное считывание с файла идет через указатели.
лично я прекрасно читаю файлы, не используя указатели
Domenick
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 12
05.08.2011, 09:30     Посоветуйте новичку в С++ #42
Цитата Сообщение от LosAngeles Посмотреть сообщение
используется неявно. Компилятор каждый раз засовывает в стек или в один из регистров указатель, который потом используется в теле конструктора, деструктора или нестатического метода как this. Но чтобы писать хорошие программы, такие подробности знать не нужно. Только для расширения кругозора или крекинга

Добавлено через 2 минуты

лично я прекрасно читаю файлы, не используя указатели
если незнать что используются указатели, можно один раз попасть на корявые значения, и потом сидеть пару дней думать " какого хрена" и не дебаг и не что не поможет.
как читаешь файлы? в 2 словах опиши.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
05.08.2011, 09:31     Посоветуйте новичку в С++ #43
Domenick, с помощью объектно-ориентированной системы ввода-вывода... Без указателей...
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.08.2011, 09:32     Посоветуйте новичку в С++ #44
Цитата Сообщение от Domenick Посмотреть сообщение
прочел, про STL и хотите сказать в том же vector или string не используются указатели?
с/с++ это язык системного программирования, и в его основе лежит 90% работы с памятью, да даже банальное считывание с файла идет через указатели.
и что за уровень абстракции там?
Какая разница, где что используется?
Я могу спокойно использовать вектор, и меня должно заботить не то, как он реализован, а то, как с его помощью можно решить поставленную цель.
Почитайте.
Domenick
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 12
05.08.2011, 09:33     Посоветуйте новичку в С++ #45
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Domenick, с помощью объектно-ориентированной системы ввода-вывода... Без указателей...
например, как ты считаешь с файла 1.txt первую строчку?
LosAngeles
Заблокирован
05.08.2011, 09:34     Посоветуйте новичку в С++ #46
Цитата Сообщение от Domenick Посмотреть сообщение
например, как ты считаешь с файла 1.txt первую строчку?
http://www.cplusplus.com/reference/iostream/fstream/
Domenick
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 12
05.08.2011, 09:35     Посоветуйте новичку в С++ #47
Цитата Сообщение от diagon Посмотреть сообщение
Какая разница, где что используется?
Я могу спокойно использовать вектор, и меня должно заботить не то, как он реализован, а то, как с его помощью можно решить поставленную цель.
Почитайте.
но темне-мение вы согласны что указатели используются?
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.08.2011, 09:36     Посоветуйте новичку в С++ #48
Цитата Сообщение от Domenick Посмотреть сообщение
например, как ты считаешь с файла 1.txt первую строчку?
C++
1
2
3
4
5
6
7
#include <fstream>
#include <sstream>
int main(){
    std::ifstream in("1.txt");
    std::string str;
    std::getline(in, str);
}
Где здесь указатели?
В реализации этих классов, они, вероятнее всего, есть, но это другой слой абстрагирования, т.е. реализация этих классов не должна волновать программиста
но темне-мение вы согласны что указатели используются?
Да, они используются, но блин, на с++ можно спокойно кодить вообще не зная, что это такое.
LosAngeles
Заблокирован
05.08.2011, 09:38     Посоветуйте новичку в С++ #49
Цитата Сообщение от Domenick Посмотреть сообщение
но темне-мение вы согласны что указатели используются?
с этим никто и не спорит
Domenick
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 12
05.08.2011, 09:38     Посоветуйте новичку в С++ #50
Цитата Сообщение от LosAngeles Посмотреть сообщение
смешно)
например используя
read -Read block of data
хочешь сказать этот read читает без указателя?)))) если ты используешь какуюто библиотеку(которая делает все за тебя) это незначит что надо говорить, что этого там нет)
LosAngeles
Заблокирован
05.08.2011, 09:40     Посоветуйте новичку в С++ #51
читать до просветления
http://www.cplusplus.com/reference/i...perator%3E%3E/
http://www.cplusplus.com/reference/i...perator%3C%3C/
Domenick
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 12
05.08.2011, 09:46     Посоветуйте новичку в С++ #52
Цитата Сообщение от diagon Посмотреть сообщение
Да, они используются, но блин, на с++ можно спокойно кодить вообще не зная, что это такое.
можно) но лучше это понимать) чтобы не натыкатся на косяки со значениями)
Сыроежка
Заблокирован
05.08.2011, 19:20     Посоветуйте новичку в С++ #53
Цитата Сообщение от diagon Посмотреть сообщение
Ну а при чем здесь массивы в си-стиле?
В с++ есть STL, в которой есть очень удобные контейнеры. При их использовании не нужны никакие указатели, т.к. это другой уровень абстракции.
Как не нужны указатели? А итераторы - это не указатели? Например, многие реализации шаблонного класса вектор в качестве итераторов используют обычные указатели!
LosAngeles
Заблокирован
05.08.2011, 19:22     Посоветуйте новичку в С++ #54
Цитата Сообщение от Сыроежка Посмотреть сообщение
Например, многие реализации шаблонного класса вектор в качестве итераторов используют обычные указатели
ключевое слово тут "в реализации"
Сыроежка
Заблокирован
05.08.2011, 19:26     Посоветуйте новичку в С++ #55
Цитата Сообщение от LosAngeles Посмотреть сообщение
используется неявно. Компилятор каждый раз засовывает в стек или в один из регистров указатель, который потом используется в теле конструктора, деструктора или нестатического метода как this. Но чтобы писать хорошие программы, такие подробности знать не нужно. Только для расширения кругозора или крекинга

Добавлено через 2 минуты

лично я прекрасно читаю файлы, не используя указатели
Да кто вам такую глупость сказал, что чтобы писать хорошие программы, такие подробности знать не надо?!!! Как раз чтобы писать хорошие программы, нужно очень хорошо знать подробности!

Например, вы знаете различие между

C++
1
class A;
...

C++
1
this->~A();
и
C++
1
~A():
???

Добавлено через 1 минуту
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Domenick, с помощью объектно-ориентированной системы ввода-вывода... Без указателей...
Объектно-ориентированная система ввода использует итераторы, которые очень часто являются простыми указателями!

Добавлено через 2 минуты
Цитата Сообщение от diagon Посмотреть сообщение
Какая разница, где что используется?
Я могу спокойно использовать вектор, и меня должно заботить не то, как он реализован, а то, как с его помощью можно решить поставленную цель.
Почитайте.
А как вы можете использовать вектор без указателей?!!! И как вы можете реализовать полиморфизм, когда вектор содержит указатели, определенные как указатели на базовый класс?!

Вы все спорите с Domenick, который очевидно на голову выше вас в понимании С++! Бессмысленный спор. Лучше идите и учите С++!
LosAngeles
Заблокирован
05.08.2011, 19:30     Посоветуйте новичку в С++ #56
Цитата Сообщение от Сыроежка Посмотреть сообщение
Да кто вам такую глупость сказал, что чтобы писать хорошие программы, такие подробности знать не надо?!!!
внимание! есть тут ещё люди которые считают что, то что компилятор перед вызовом конструктора, деструктора или нестатического метода неявно кладёт указатель this в стек или регистр важно знать? И если такие люди есть, то покажите программы, где это знание используется? Хотя в любом случае мне всё равно. Очевидно это будет отстойная программа.
Сыроежка
Заблокирован
05.08.2011, 19:36     Посоветуйте новичку в С++ #57
Цитата Сообщение от LosAngeles Посмотреть сообщение
внимание! есть тут ещё люди которые считают что, то что компилятор перед вызовом конструктора, деструктора или нестатического метода неявно кладёт указатель this в стек или регистр важно знать? И если такие люди есть, то покажите программы, где это знание используется? Хотя в любом случае мне всё равно. Очевидно это будет отстойная программа.
В стек кладет указатель, или в регистр - разговор не о том! А разговор идет о понимании того, что объектно-ориентированное программирование опирается на указатели. Я вам уже привел на словах пример полиморфизма суказателями. Могу его написать

C++
1
2
3
4
5
6
7
8
9
10
11
class A
{
public:
virtual ~A() {}
};
 
class B: public A
{
};
 
A *p = new B;
Это один из краеугольных камней объектно-ориентированного программирования. И надо очень хорошо понимать механику работу с указателями!
LosAngeles
Заблокирован
05.08.2011, 19:45     Посоветуйте новичку в С++ #58
Цитата Сообщение от Сыроежка Посмотреть сообщение
А разговор идет о понимании того, что объектно-ориентированное программирование опирается на указатели. Я вам уже привел на словах пример полиморфизма суказателями
нет, как раз разговор об этом не шёл, может ты ветку перепутал, тут очевидно никто про это и не упоминал

Чтобы программировать на С++ или любом другом языке знать, как реализованны его внутренности не нужно. Иначе это очевидно хреновый язык. Так что, то что я выше описал точно не необходимо и пригодится нигде не может. Пусть С++ опирается на что угодно, хоть на указатели, хоть на чё

Если для понимания того, что происходит, нужно увидеть реализацию, это не абстракция(с) - Ф. Дж. Плоджер
Сыроежка
Заблокирован
05.08.2011, 19:54     Посоветуйте новичку в С++ #59
Цитата Сообщение от LosAngeles Посмотреть сообщение
нет, как раз разговор об этом не шёл, может ты ветку перепутал, тут очевидно никто про это и не упоминал

Чтобы программировать на С++ или любом другом языке знать, как реализованны его внутренности не нужно. Иначе это очевидно хреновый язык. Так что, то что я выше описал точно не необходимо и пригодится нигде не может. Пусть С++ опирается на что угодно, хоть на указатели, хоть на чё

Если для понимания того, что происходит, нужно увидеть реализацию, это не абстракция(с) - Ф. Дж. Плоджер
Нет, я не ошибся, я хорошо понял, о чем идет речь. Это вы просто уводите в сторону. Разговор начинался именно с того, что в С++ регулярно используются указатели, и знать их нужно. Вы же стали этот тезис отвергать, ссылаясь на всякие там контейнеры и т.д., забывая, что итераторы - это очень часто те же самые указатели.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2011, 20:03     Посоветуйте новичку в С++
Еще ссылки по теме:

C++ посоветуйте литературу, новичку
Подскажите новичку C++
C++ C++ новичку
Советы новичку C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.08.2011, 20:03     Посоветуйте новичку в С++ #60
Цитата Сообщение от Сыроежка Посмотреть сообщение
А итераторы - это не указатели?
Нет.
Это класс с перегруженной операцией разыменования.
Что лежит в его реализации никого вообще волновать не должно.

Цитата Сообщение от Сыроежка Посмотреть сообщение
А как вы можете использовать вектор без указателей?!!!
Мне больше интересно, как я смогу использовать вектор с указателями ; D

Вы все спорите с Domenick, который очевидно на голову выше вас в понимании С++!
Си - возможно. Но касательно с++ - сомневаюсь =) Аргументируйте, пожалуйста.
Yandex
Объявления
05.08.2011, 20:03     Посоветуйте новичку в С++
Ответ Создать тему
Опции темы

Текущее время: 07:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru