Книга по C++ (особые требования:))
Модератор: Модераторы разделов
-
- Сообщения: 68
- ОС: Ubuntu
Книга по C++
Тем по выбору литературы по плюсам полно как на этом форуме, так и в гугле.
Тему же создал из-за того что есть требования к книге, найти поиском по требованиям будет сложно.
Требования:
0. Печатное издание, не люблю читать с монитора
1. Отсутствие "воды"
2. Отсутствие введения в программирование, т.е. объяснений что есть циклы, переменные и т.п.
3. Куча примеров
4. Объяснение сложных моментов в языке (шаблоны, наследования и т.п.)
5. Понятное и простое объяснение
PS Сформулировать все точно сразу не получилось, в будущем скорее всего буду корректировать пост.
Тему же создал из-за того что есть требования к книге, найти поиском по требованиям будет сложно.
Требования:
0. Печатное издание, не люблю читать с монитора
1. Отсутствие "воды"
2. Отсутствие введения в программирование, т.е. объяснений что есть циклы, переменные и т.п.
3. Куча примеров
4. Объяснение сложных моментов в языке (шаблоны, наследования и т.п.)
5. Понятное и простое объяснение
PS Сформулировать все точно сразу не получилось, в будущем скорее всего буду корректировать пост.
-
- Сообщения: 208
- Статус: Lead guitar adept
- ОС: Ubuntu
Re: Книга по C++
Герберт Шилдт - "Полный справочник по C++. 4-е издание", отвечает всем пунктам. Книга переведена очень хорошо, т.е там где термины можно переводить, их переводят, там где лучше оставить на английском, не коверкают, нерабочих примеров ещё не встречал, недоговоров тоже. Введение - как раз то что ищешь, т.е краткий обзор языка и описание различий с С.
P.S: Удобно читать даже в цифровом виде, ну, по-крайней мере на моем 23" монике ). Слева книжка, справа vim, пишешь коротенькие программки, проверяешь все-ли понял, листаешь дальше. Хотя от печатного издания не отказался бы
P.S: Удобно читать даже в цифровом виде, ну, по-крайней мере на моем 23" монике ). Слева книжка, справа vim, пишешь коротенькие программки, проверяешь все-ли понял, листаешь дальше. Хотя от печатного издания не отказался бы

-
- Сообщения: 68
- ОС: Ubuntu
Re: Книга по C++
Сразу не понравилось то что вперемешку C и C++. А так вроде довольно не плохо, объем впечатляет.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
- Сообщения: 68
- ОС: Ubuntu
Re: Книга по C++
Не буду отрицать, посмотрел наискосок книгу.
Наверно ее и куплю, конечно, если вдруг не найду что-либо еще лучшее.
Наверно ее и куплю, конечно, если вдруг не найду что-либо еще лучшее.
-
- Сообщения: 204
- ОС: Slackware-14
Re: Книга по C++
... ну я же просил четыреста капель , а сдесь четыреста две ...
-
- Сообщения: 203
- ОС: RFRemix
Re: Книга по C++
Там именно так. Классная книжка.
/me счастливый обладатель бумажного варианта

Спасибо сказали:
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Книга по C++
nuclear писал(а): ↑10.10.2010 02:070. Печатное издание, не люблю читать с монитора
1. Отсутствие "воды"
2. Отсутствие введения в программирование, т.е. объяснений что есть циклы, переменные и т.п.
3. Куча примеров
4. Объяснение сложных моментов в языке (шаблоны, наследования и т.п.)
5. Понятное и простое объяснение
Джефф Элджер
"C++ ++"
п4 подходит полностью. п5... ну там очень сложные вещи рассмотрены - сборка мусора в С++ это вам не ***.
что такое "цикл" там нет. воды тоже нет. куча примеров есть (в т.ч. довольно нетривиальных). на бумаге должна быть. у меня есть электронный вариант, но я сомневаюсь в его легальности.
Спасибо сказали:
-
- Бывший модератор
- Сообщения: 3491
- Статус: ...
- ОС: OS X, GNU_и_не_только/Linux
Re: Книга по C++
My god... it's full of stars!...
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Книга по C++
да. только новичкам ИМХО не следует её серьёзно воспринимать (как руководство к действию) - книжка очень короткая, и многие тонкие моменты остались нераскрыты - используя идиомы от туда можно прострелить себе не только ноги, но и все выступающие части ;) Особенно веселы шуточки с памятью :)
-
- Бывший модератор
- Сообщения: 3491
- Статус: ...
- ОС: OS X, GNU_и_не_только/Linux
Re: Книга по C++
Исходя из своего опыта, могу сказать, что новичок в ней просто ничего толком не поймет (:
My god... it's full of stars!...
-
- Сообщения: 68
- ОС: Ubuntu
Re: Книга по C++
Вспомнил еще одно требование к "книге мечты".
Мне не так нужно описание стандартной библиотеки классов и STL, т.е. даже совсем не нужно, так как намного удобнее смотреть такие вещи на компе. Например, из-за поиска
Больше бы хотелось чтобы были объяснены тонкие моменты, ну как например многопоточные приложения, безопасные указатели и куча других интересных вещей о которых я пока не подозреваю., но на уровне все же новичка в плюсах
Мне не так нужно описание стандартной библиотеки классов и STL, т.е. даже совсем не нужно, так как намного удобнее смотреть такие вещи на компе. Например, из-за поиска

Больше бы хотелось чтобы были объяснены тонкие моменты, ну как например многопоточные приложения, безопасные указатели и куча других интересных вещей о которых я пока не подозреваю., но на уровне все же новичка в плюсах

-
- Сообщения: 208
- Статус: Lead guitar adept
- ОС: Ubuntu
Re: Книга по C++
Ну, например пока C++0x не приняли, многопоточные приложения на голом С++ не напишешь, нужны либы.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Книга по C++
безопасных указателей не бывает. это только в других ЯП.
в С++ все указатели опасные.
-
- Сообщения: 142
- ОС: GNU/Linux, BSD
Re: Книга по C++
Элджер,конечно, хорошо пишет, но не для новичка. Все его книги я бы порекомендовал среднему программисту.
Шилдт - хорошо, но лишнее про С (автор топика хочет С++) и про основы С++
Прата - много внимания уделено основам языка (автору топика этого не надо), но также есть довольно много примеров.
Лафоре - на мой взгляд лучшая книга для начинающего и среднего программиста С++. Основы описаны поверхостно, только для того, чтобы дальше было легче изучать, довольно хорошие примеры, хорошо описаны тонкости реализации ООП на С++, и параллельно идёт описание UML, что очень хорошо позволяет понять проектирование приложений.
Страуструп - несомненно лучший справочник для среднего и ПРО.
Шилдт - хорошо, но лишнее про С (автор топика хочет С++) и про основы С++
Прата - много внимания уделено основам языка (автору топика этого не надо), но также есть довольно много примеров.
Лафоре - на мой взгляд лучшая книга для начинающего и среднего программиста С++. Основы описаны поверхостно, только для того, чтобы дальше было легче изучать, довольно хорошие примеры, хорошо описаны тонкости реализации ООП на С++, и параллельно идёт описание UML, что очень хорошо позволяет понять проектирование приложений.
Страуструп - несомненно лучший справочник для среднего и ПРО.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Книга по C++
А по-моему, только более-менее узнав С, человек может понять, что С++ в 99.99% случаев ему не нужен...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 142
- ОС: GNU/Linux, BSD
Re: Книга по C++
Холив ару не поддамся.

Я не против С или С++, я про то что топикстартер хочет изучить С++.
Самому последнее время приходится писать на С.
-
- Сообщения: 1450
Re: Книга по C++
Много задач хорошо ложатся на ООП и хорошо пишутся на C++. На С моск нужно вывихнуть что бы их написать.
Системные задачи - да, согласен с процентами.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Книга по C++
Sleeping Daemon писал(а): ↑05.01.2011 15:47Много задач хорошо ложатся на ООП и хорошо пишутся на C++. На С моск нужно вывихнуть что бы их написать.
Системные задачи - да, согласен с процентами.
Пользовательские задачи тоже. Расчеты всякие, работа с железками, GUI - все это прекрасно пишется на С. Для плюсов трудно найти подходящую задачу. Чтобы с толком использовать все эти объекты, наследования, перегрузку операторов и т.п.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Книга по C++
например сложные структуры данных вроде сильноветвящихся деревьев. Я видел, как это реализуется в C - сплошные преобразования void*->type->void*.
Быстрого косвенного перехода в C тоже нет, а массив указателей на функции выглядит как НЕХ несколько непонятно даже для самого кодера.
да, ещё callback функции тоже радуют в C....
-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Книга по C++
Расчеты, работа с железками, GUI пишется даже на асме. На C++ это часто делается проще.
Но главный плюс C++ - сложные структуры данных. На C работа с ними обрастает приведениями типов и костылями.
Модульная архитектура и плагины тоже часто легче реализовываются на C++.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Книга по C++
Ну, т.к. я знаю С на уровне "постольку поскольку", а плюсы вообще не знаю, то мне, ясное дело, со сложными структурами данных сталкиваться не приходилось.
// Использую С для написания прикладного софта для личного пользования или для обслуживания разрабатываемого нашей лабораторией оборудования. Т.е. фактически для того, для чего глубоких знаний ЯП вообще не нужно.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 362
- Статус: Ad Astra per aspera
- ОС: openSUSE 11.4, Arch
Re: Книга по C++
если на Си нужны приведения типов и костыли, то как без них, или хотя бы только без приведения типов, обойтись в С++? или dynamic_cast и пр. уже не приведение типов? мне кажется, что если требуется дофига костылей, то это проблема не языка, а дизайна.
хотя C++ удобней Си хотя бы за наличие std::string и std::vector

No problems - just solutions!
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Книга по C++
Со строками в сях очень удобно работать. А вектор можно и самому сделать. Или использовать какую-нибудь библиотеку (хоть тот же GSL).
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Книга по C++
Пусть есть деревовидная структура:
И эта самая структура может содержать элементы разных типов (к примеру, распарсенный XML DOM - корневой элемент дерева - документ, в него входят элементы XML, в которые, в свою очередь, входят атрибуты, текст и другие элементы).
Для простоты и краткости реализации generateText и некоторых других методов приводить не буду.
Вот так будет выглядеть создание простенького документа XHTML (для простоты DTD и прочую ерунду упускаю):
Код достаточно естественный и вполне нормальный (если не считать отсутствия проверок на ошибки и того, что пример создан на скорую руку).
Теперь попробуем сделать то же, только на C. Здесь сразу возникает закономерный вопрос: как?
Есть разные способы. Всякие GObject и прочие объектно-ориентированные костыли для C я не рассматриваю (т.к. я их не знаю).
Можно сделать так:
Пример использования:
Пример, конечно, немного надуманный, но демонстрирует тот случай, когда в C требуются костыли, а в C++ все делается встроенными средствами.
PS. Извиняюсь за очень длинный пример и возможное наличие в нем ошибок.
Код: Выделить всё
class TreeNode
{
TreeNode* m_nextSibl;
TreeNode* m_firstChild;
pubic:
TreeNode* nextSibling(){return m_nextSibl;}
TreeNode* firstChild(){return m_firstChild;}
void insertAfterIt(TreeNode* node);
void insertChild(TreeNode* node);
virtual string generateText()=0;
~TreeNode();
};
И эта самая структура может содержать элементы разных типов (к примеру, распарсенный XML DOM - корневой элемент дерева - документ, в него входят элементы XML, в которые, в свою очередь, входят атрибуты, текст и другие элементы).
Код: Выделить всё
class DomDocument : public TreeNode
{
public:
DomDocument();
DomDocument(string fileNameToParse);
void saveToFile(string fileName);
string generateText();
};
Код: Выделить всё
class DomElement : public TreeNode
{
string m_name;
public:
DomElement(string name):m_name(name){}
string generateText();
};
Код: Выделить всё
class DomAttr : public TreeNode
{
string m_name,m_val;
public:
DomAttr(string name,string value):m_name(name),m_value(name){}
string generateText();
};
Код: Выделить всё
class DomText : public TreeNode
{
string m_text;
public:
DomText(string text):m_text(text){}
string generateText();
};
Для простоты и краткости реализации generateText и некоторых других методов приводить не буду.
Вот так будет выглядеть создание простенького документа XHTML (для простоты DTD и прочую ерунду упускаю):
Код: Выделить всё
DomDocument* doc=new DomDocument;
DomElement* html=new DomElement("html");
DomElement* head=new DomElement("head");
DomElement* title=new DomElement("title");
DomText* titleText=new DomText("Заголовок");
title->insertChild(titleText);
head->insertChild(title);
html->insertChild(head);
DomElement* body=new DomElement("body");
DomElement* div=new DomElement("div");
DomAttr* align=new DomAttr("align","center");
DomText* centerText=new DomText("Hello, World!");
div->insertChild(align);
align->insertAfterIt(centerText);
body->insertChild(div);
html->insertChild(body);
doc->insertChild(html);
string docText=doc->generateText();
Код достаточно естественный и вполне нормальный (если не считать отсутствия проверок на ошибки и того, что пример создан на скорую руку).
Теперь попробуем сделать то же, только на C. Здесь сразу возникает закономерный вопрос: как?
Есть разные способы. Всякие GObject и прочие объектно-ориентированные костыли для C я не рассматриваю (т.к. я их не знаю).
Можно сделать так:
Код: Выделить всё
struct TreeNode
{
TreeNode* nextSibling;
TreeNode* firstChild;
void(*generateText)(TreeNode*,char*);//указатель на функцию, костыль вместо виртуальных функций
void* dataPtr;//указатель на данные, специфичные для конкретного узла дерева, костыль вместо наследования
};
struct DomElementData
{
char name[100]; //Для упрощения применим строки фиксированной длины
};
struct DomAttrData
{
char name[100];
char value[1000];
};
struct DomTextData
{
char text[1000];
};
void insertChild(TreeNode* parent,TreeNode* child);
void insertAfter(TreeNode* first,TreeNode* next);
//А в реализациях этих функций обязательно понадобятся приведения типов
void DomDocumentGenerateText(TreeNode* node,char* dest);//Реализация generateText для DomDocument
void DomElementGenerateText(TreeNode* node,char* dest);//Реализация generateText для DomElement
void DomAttrGenerateText(TreeNode* node,char* dest);//Реализация generateText для DomAttr
void DomTextGenerateText(TreeNode* node,char* dest);//Реализация generateText для DomText
//Конструкторы, здесь тоже понадобятся приведения типов
//DomDocument:
TreeNode* DomDocumentConstruct()
{
TreeNode* tmp=malloc(sizeof(TreeNode));
memset(tmp,0,sizeof(TreeNode));
tmp->generateText=DomDocumentGenerateText;
return tmp;
}
TreeNode* DomDocumentConstructFromFile(const char* filename);
//DomElement:
TreeNode* DomElementConstruct(const char* name)
{
TreeNode* tmp=malloc(sizeof(TreeNode));
memset(tmp,0,sizeof(TreeNode));
tmp->generateText=DomElementGenerateText;
tmp->dataPtr=malloc(sizeof(DomElementData);
strcpy((DomElementData*)tmp->dataPtr)->name,name);
return tmp;
}
//Для остальных аналогично, поэтому реализацию приводить не буду
TreeNode* DomAttrConstruct(const char* name,const char* value);
TreeNode* DomTextConstruct(const char* text);
//Функции-члены DomDocument, здесь тоже понадобятся приведения типов
void DomDocumentSaveToFile(TreeNode* node,const char* name);
Пример использования:
Код: Выделить всё
TreeNode* doc=DomDocumentConstruct();
TreeNode* html=DomElementConstruct("html");
TreeNode* head=DomElementConstruct("head");
TreeNode* title=DomElementConstruct("title");
TreeNode* titleText=DomTextConstruct("Заголовок");
insertChild(title,titleText);
insertChild(head,title);
insertChild(html,head);
TreeNode* body=DomElementConstruct("body");
TreeNode* div=DomElementConstruct("div");
TreeNode* align=DomAttrConstruct("align","center");
TreeNode* centerText=DomTextConstruct("Hello, World!");
insertChild(div,align);
insertAfter(align,centerText);
insertChild(body,div);
insertChild(html,body);
insertChild(doc,html);
char docText[65536]
doc->generateText(doc,docText);
Пример, конечно, немного надуманный, но демонстрирует тот случай, когда в C требуются костыли, а в C++ все делается встроенными средствами.
PS. Извиняюсь за очень длинный пример и возможное наличие в нем ошибок.
-
- Сообщения: 459
- ОС: openSUSE
Re: Книга по C++
Нет, здесь сразу возникает закономерный вопрос: зачем? В реальной жизни совершенно необязательно писать все и всегда только на C или C++.
Просто исходное утверждение
А по-моему, только более-менее узнав С, человек может понять, что С++ в 99.99% случаев ему не нужен...
на самом деле стоит чуть изменить: в подавляющем большинстве случаев, когда C/C++ является лучшим выбором для задачи, чистый C оказывается лучше C++. Или, как вариант: практически отсутствуют задачи, для решения которых именно C++ является лучшим выбором. Для каждой конкретной задачи всегда найдется что-то более удобное.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Книга по C++
Лень мне ваш пример читать. Но вы, видимо, с gtk не сталкивались. А там, между прочим, ui можно загружать из XML-файла.
Фантом писал(а): ↑08.01.2011 15:11в подавляющем большинстве случаев, когда C/C++ является лучшим выбором для задачи, чистый C оказывается лучше C++. Или, как вариант: практически отсутствуют задачи, для решения которых именно C++ является лучшим выбором. Для каждой конкретной задачи всегда найдется что-то более удобное.
Согласен. Для меня лучшим выбором является С (учитывая то, что другие компилируемые ЯП я вообще не знаю и знать не хочу

RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Книга по C++
А зря.
Сталкивался (правда, это было абсолютно упругое столкновение

А это здесь причем? Я не говорил, что XML парсить на C плохо или неудобно. Я привел пример, который показывает, что с DOM работать в C намного менее удобно, чем в плюсах. А DOM чаще всего нужен при создании или редактировании сложных XML-документов.
Gtk для загрузки ui из XML-файла (правда, если мне не изменяет память, это уже не функция Gtk, а функция libglade), скорее всего, юзает libxml. А он работает совсем по другой схеме и более простой схеме: DOM не генерируется, а устанавливаются коллбэки, которые парсер вызывает при начале/окончании разбора документа, элементов, атрибутов и прочей ерунды.
Поэтому для вас единственная объективная причина выбора C вместо C++ является знание первого.
Как вариант интерпрерпретации данного высказывания:
Человек, изучая C, узнает о многих недостатках и сложностях и предположит, что раз C++ - это C + ООП, то он не спасает от неудобств и недостатков C, и нужно изучать что-то более современное и простое в понимании и программировании, например, Python 3.
(К сожалению, последние 50 лет показывают, что эволюция способна породить только помойку (что хорошо иллюстрируют многие вещи с долгой историей: C, C++, Linux, Windows, gcc, а также менее связанные с ПО вещи: архитектура x86, и в еще большей мере x86-64)).
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Книга по C++
Нет уж, спасибо. Эта дрянь мне не нужна...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 1445
- ОС: Debian Squeeze