Проблема, с которой я столкнулся, заключается в том, что большинство книг по С ++, которые я читаю, почти всегда тратят на синтаксис и основы языка, например, for
циклы while
, массивы, списки, указатели и т. Д.
Но они, кажется, никогда не создают ничего настолько простого, чтобы использовать его для обучения, но достаточно практичного, чтобы вы могли понять философию и силу языка.
Затем я наткнулся на QT, которая является удивительной библиотекой!
Но, работая с демоверсиями, похоже, что я сейчас нахожусь в обратной дилемме. Я чувствую себя сыном богача, который ездит на спортивной машине, субсидируемой отцом. Как будто я мог бы создавать фантастические программы, но понятия не имею, что происходит под капотом.
В качестве примера моей дилеммы возьмем задачу создания простого веб-браузера. В чистом C ++ я даже не знаю, с чего начать, но с библиотекой Qt это можно сделать за несколько строк кода.
Я не жалуюсь на это. Мне просто интересно, как заполнить пробел в знаниях между базовой структурой языка и интерфейсом высокого уровня, который обеспечивает инфраструктура Qt?
источник
Ответы:
Вы хотите знать, как нажатие на акселератор заставляет автомобиль двигаться быстрее, или вас интересует только то, что нажатие на акселератор заставляет автомобиль двигаться быстрее?
Вы видите выгоду для программирования черного ящика, который является отличным способом проектирования системы, когда все ящики работают. Кто-то должен сделать черные ящики, и если вы хотите быть тем парнем / девушкой, то вам нужно знать больше о языке, чем парень, использующий коробку.
Есть работы, которые хороши в каждом стиле, так что вам решать, что вы хотите запрограммировать. IMO, вы бы оказали себе медвежью услугу, хотя, если бы вы не приложили усилий, чтобы отодвинуть часть абстракции, которую QT дает вам в конце концов.
источник
Наибольший ущерб, который вы нанесете себе, если вы хотите выразиться таким образом, заключается в том, что вы вообще не научитесь использовать стандартные структуры данных C ++, итераторы, алгоритмы и строки. Qt имеет собственные библиотеки для всех этих целей, и вы почти вынуждены использовать их вместо стандартных объектов C ++, потому что API Qt принимают только свои собственные структуры данных.
Можно утверждать, что научиться использовать одну библиотеку алгоритмов после освоения другой - тривиальная задача. Прежде чем идти на собеседование, где интервьюеры ожидают, что вы освоите C ++, убедитесь, что вы заранее разбираетесь с этой мелочью.
источник
Учитывая, что Qt имеет свой собственный мета-компилятор, с которым вам нужно обрабатывать исходные файлы, трудно считать код Qt «просто C ++».
Но что еще более важно, стиль C ++, который использует и поощряет Qt, - это то, что для остальных из нас в последний раз видели примерно в 1995 году.
На самом деле, это попытка сделать C ++ максимально похожим на Java. Он пропускает или обескураживает все удивительные вещи, которые на самом деле делают C ++ достойным использования сегодня . Вместо этого вы попадаете в подмножество, которое больше всего похоже на низшую Java.
Поэтому, если цель состоит в том, чтобы изучить C ++, я бы сказал, нет, держитесь подальше от Qt. Возможно, посмотрите вместо этого на Boost, если вы хотите использовать установленную библиотеку в качестве отправной точки. Повышение воплощает практики, которые сегодня считаются хорошими .
Но , честно говоря, если вы хотите узнать , язык C ++ , а затем подобрать хороший учебник, и сосредоточиться на языке .
Написание веб-браузера, независимо от того, как вы это делаете, в лучшем случае научит вас веб-браузерам. Это не научит вас много о языке, который вы используете.
C ++ как язык не имеет встроенного класса WebBrowser. Если вы читаете стандарт C ++, он ничего не говорит о браузерах. Он даже не упоминает приложения с графическим интерфейсом.
Это потому, что эти вещи построены сверху, предоставлены такими библиотеками , как Qt. C ++, как и любой язык программирования, посвящен логике, тому, как выразить эту логику. И да, это означает, что нужно работать с массивами, указателями, циклами и всем этим.
Сможете ли вы написать веб-браузер, используя только эти встроенные инструменты, если у вас будет достаточно времени ? Знаете ли вы, как выразить логику программы? Если нет, то вам нужно тратить больше времени на циклы и указатели, и меньше звонить
new QWebKit()
и просто совмещать готовые библиотеки.«Философия и мощь языка» заключаются в массивах, списках и циклах, а не в веб-браузерах.
источник
Может быть.
Мне нужно увидеть код, который вы добавляете в обработчики событий.
Правда, не зацикливайтесь на том, как много вы «знаете». Мы все используем оконные фреймворки и все еще учимся. Просто продолжайте кодировать / читать новые вещи, и вы продолжите изучать C ++. Изучение новой оконной инфраструктуры - отличное дополнение к вашим навыкам, даже если это не означает, что вы можете реализовать нейронную сеть или быструю сортировку в C ++.
источник
Не беспокойся; сначала большая часть вашего кода будет использовать только фреймворк, но через некоторое время вам придется его расширять , хотя бы чуть-чуть. Тогда вам придется использовать все больше и больше C ++.
Также помните, что у вас есть весь доступный источник Qt, IDE с радостью предоставит вам определение любой функции / метода / класса, которое вы хотите. Чем глубже вы идете, тем больше C ++ вы увидите.
Другие упоминали о разнице между Qt C ++ и стандартным C ++. Эти попадают в два лагеря:
другая библиотека: Qt включает в себя все обычные контейнеры: массивы, списки, наборы, хеш-карты и т. д. Они очень хорошо сочетаются друг с другом и являются хорошей реализацией, но они не являются разновидностью STD. Тем не менее, в последних версиях (4.1 и более поздних, я думаю) они имеют «STD-подобные» API в дополнение к старому варианту (и Java-подобный API). В конце концов, выбор дизайна (когда использовать массив, когда использовать хэш-карту) одинаков, поэтому переход на STD для не-Qt проектов не такой сложный.
moc
дополнения синтаксиса: в основном для обработки сигналов, но также пара более приятных конструкций цикла. Многие люди считают, что этот инструмент означает, что он больше не C ++; но имхо они чувствуют себя как чуть более умные макросы. Хорошая слабосвязанная обработка сигналов является огромным преимуществом хорошей структуры, и ее общеизвестно сложно сделать на языке статической типизации. В современном C ++ это выполнимо с большой дозой шаблонов; но это было далеко от стандарта, когда Qt впервые получилmoc
. В конце, если вы позже захотите делать не-Qt проекты, сначала проверьте, будете ли вы использовать какую-либо инфраструктуру и есть ли у нее сигналы. Если да, то большинство из того, что вы привыкли делать с Qt, будут применимы, так что не нужно «вредить» при изучении Qt.источник
moc
?foreach
это просто макрос .... (на самом деле "псевдоним",Q_FOREACH
определенный в<Qt/qglobal.h>
). Я не думаю, чтоmoc
это обрабатывает. И C ++ 11 имеетfor (auto it : container)
конструкцию!Qt широко используется в коммерческом мире, поскольку предоставляет полный кроссплатформенный набор инструментов и среду разработки, включая хорошую библиотеку графического интерфейса.
Он также полностью поддерживает интернационализацию, в том числе отличный инструмент «Лингвист».
Если вы планируете академическую карьеру, то я не стал бы беспокоиться о Qt. Если, с другой стороны, вам нравится C ++ и вы хотите освоить рыночный навык, то Qt стоит изучить.
И да, Qt - это C ++, и вы можете смешивать стандартные и добавлять библиотеки к своему сердцу, если это заставляет вас чувствовать себя лучше.
источник
Это плохая идея изучать C ++ через Qt. Сначала вы должны изучить языковые концепции, не зависящие от какой-либо среды, и это то, чему вас научат книги на c ++, и они правы. По сути, «for и циклы while, массивы, списки, указатели» - вот что такое языки программирования. Дополнительные функции обеспечиваются фреймворками. Как только вы изучите язык программирования, вы сможете изучить любую инфраструктуру, такую как Qt или MFC, которая построена с использованием языка, что позволяет быстро разрабатывать приложения. Что касается Qt, то, как только вы изучите c ++, это отличная среда, которая делает вас столь же продуктивным, как и любые разработчики на Java или .Net. Вскоре вы сможете разрабатывать приложения для iOS и Android, используя Qt.
источник
Что ж, я думаю, что лучший способ изучить C ++ - это использовать ТОЛЬКО собственный синтаксис (стандартный C ++), поэтому вы сможете использовать материал ЯЗЫКА, а НЕ Qt (или любые другие фреймворки, библиотеки ... и т. Д.).
Зачем? потому что, как новичок, когда вы посмотрите на любой код C ++, смешанный с другим кодом не-C ++ (в данном случае Qt), вы не сможете увидеть, что такое C ++, а что нет, скорее это будет более сложный процесс.
источник