رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'c++'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


وبلاگ‌ها

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • رویداد‌ها و جلسات
    • معرفی محصولات نوشته شده‌ بومی
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • زبان‌های برنامه نویسی
    • برنامه نویسی در C و ‏++C
    • برنامه نویسی با Java
    • برنامه نویسی با JavaScript
    • برنامه نویسی با Go
    • برنامه نویسی با Python
    • برنامه نویسی با Delphi
    • برنامه نویسی با Ruby
    • برنامه نویسی با VB6
  • طراحی و توسعه وب
    • برنامه نویسی در PHP
    • برنامه نویسی در Asp.Net
    • برنامه نویسی با Node.JS
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
  • بانک‌های اطلاعاتی
    • پایگاه داده MySQL
    • پایگاه داده PostgreSQL
    • پایگاه داده SQLite
    • پایگاه داده MongoDB
    • پایگاه داده SQL Server
    • دیگر پایگاه‌های داده
  • برنامه نویسی تحت محصولات اپل
    • محیط توسعه Xcode
    • برنامه نویسی با Objective-C
    • برنامه نویسی با Swift
  • برنامه نویسی تحت محصولات مایکروسافت
    • محیط توسعه Visual Studio
    • برنامه نویسی با #C
    • برنامه نویسی با Visual Basic.Net
    • طراحی و توسعه تحت Wpf
    • طراحی و توسعه تحت Universal و Fluent
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
    • طراحی رابط کاربری (UI)
    • طراحی تجربه کاربری (UX)
  • سوالات و مباحث عامیانه
    • سوالات دانشجویی
    • فناوری و سخت افزار
    • سوالات مشاوره‌ای
  • سطل آشغال
    • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • پلتفرم‌های توسعه
  • کدنویسی ایمن
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


شناسه گیت‌هاب


شناسه لینکدین


شهر

17 نتیجه پیدا شد

  1. کامبیز اسدزاده

    همانطور که می‌دانید محیط توسعه‌ی یکپارچه‌ی نرم‌افزار Visual Studio به عنوان یکی از جامع‌ترین محیط‌های توسعه بسیار شناخته شده است. برنامه‌نویسان سی‌پلاس‌پلاس بسیاری از پروژه‌های خود را تحت این محیط علاوه بر آن کیوت کریتور توسعه می‌دهند. کتابخانه‌ی کیوت افزونه‌ای را برای یکپارچه سازی خود با محیط ویژوال استودیو ارائه داده است که در حالت عادی از کتابخانه‌ی Qt به خوبی پشتیبانی می‌کند و اجازه می‌دهد تا شما کُد‌های خود را که بر اساس کتابخانه‌ی کیوت هستند در محیط ویژوال استودیو توسعه و خروجی بگیرید. اما محدودیت‌هایی در این افزونه تا به امروز وجود دارد، یکی از آن‌ها عدم هماهنگی و پشتیبانی از زبان QML بر پایه جاوا اسکریپت است. در نسخه‌ی بعدی کیوت یعنی 5.12.0 افزونه‌ی Qt Visual Studio Tools, v2.3.0 نیز منتشر خواهد شد که با نسخه‌های جدید ویژوال استودیو هماهنگ و به شما امکان اینم را خواهد داد تا بتوانید کد‌های نوشته شده توسط QML و JavaScript را اشکال‌زدایی کنید. این امکان وجود خواهد داشت تا شما هر جایی که نقطه‌ی توقف برای اشکال زدایی ایجاد کرده اید را مورد تجزیه تحلیل قرار خواهید داد. از جمله، تغییر تحولات در ارزش‌های متغیر‌ها و دیگر موارد. نسخه‌ی جدید این افزونه به طور کامل با زیرساخت اشکال زدایی QML یکپارچه سازی شده است. که به عنوان بخشی از ماژول Qt QML خدماتی برای اشکال زدایی، بررسی و ثبت و ظبط برنامه را از طریق یک پور TCP فراهم می‌کند. به صورت پیش‌فرض ویژگی اشکال زدایی در QML برای ویژوال استودیو فعال است. شما می‌توانید آن را در بخش تنظیمات افزونه ویژوال استودیو برای Qt غیرفعال کنید. این ابزار را به زودی در بخش دریافت فایل‌ها می‌توانید همزمان با نسخه‌ی ۵.۱۲.۰ کیوت دریافت نمایید.
  2. همانطور که می‌دانید یکی از مباحث شاید به ظاهر پیچیده در کیوت برقراری ارتباط بین سی‌پلاس‌پلاس و کیو‌ام‌اِل باشد. در این پست من تصمیم گرفتم مثالی را در قالب لیست تماس‌ها ایجاد کنم که شاید بعد‌ها توسعه آن ادامه داشته باشد. فرض کنید قرار است لیستی از تماس‌ها یا کاربران را دریافت و در بخش رابط کاربری خود در قالب یک لیست نمایش دهیم. قبل از هرچیز باید بدانید که برای چنین کاری کلاسی را در سمت بک‌اِند ایجاد کنید. نام این کلاس را در این مثال ContactList گذاشته‌ایم. فایل هدر مرتبط با کلاس تماس‌ها به صورت زیر است: // // File : contactlist.h // Class or Function (ContactList) // // Created by Kambiz Asadzadeh on 2018/7/19. // Copyright © 2018 Kambiz Asadzadeh. All rights reserved. // Official Website : http://kambizasadzadeh.com // Powered by : Dotwaves LLC (http://dotwaves.com) // #ifndef CONTACTLIST_H #define CONTACTLIST_H #include <QObject> //Namespace Contact namespace Contact { class ContactList; class ContactList : public QObject { Q_OBJECT Q_PROPERTY ( QString name READ name WRITE setName NOTIFY nameChanged ) Q_PROPERTY ( QString family READ family WRITE setFamily NOTIFY familyChanged ) Q_PROPERTY ( QString phone READ phone WRITE setPhone NOTIFY phoneChanged ) Q_PROPERTY ( QString device READ device WRITE setDevice NOTIFY deviceChanged ) Q_PROPERTY ( QString avatar READ avatar WRITE setAvatar NOTIFY avatarChanged ) Q_PROPERTY ( QString color READ color WRITE setColor NOTIFY colorChanged ) Q_PROPERTY ( QString url READ url WRITE setUrl NOTIFY urlChanged ) public: ContactList(QObject *parent=0); ContactList( const QString &name, const QString &family, const QString &phone, const QString &device, const QString &avatar, const QString &color, const QString &url, QObject *parent=0 ); ~ContactList(); QString name () const; QString family () const; QString phone () const; QString device () const; QString url () const; void setName (const QString &name); void setFamily (const QString &family); void setPhone (const QString &phone); void setDevice (const QString &device); void setUrl (const QString &url); //Avatar of user QString avatar () const; void setAvatar (const QString &image); //Color of user QString color () const; void setColor (const QString &color); signals: void nameChanged (); void familyChanged (); void phoneChanged (); void deviceChanged (); void avatarChanged (); void colorChanged (); void urlChanged (); private: QString m_name; QString m_family; QString m_phone; QString m_device; QString m_avatar; QString m_color; QString m_url; }; } #endif // CONTACTLIST_H قبل از هر چیز دقت کنید که برای استفاده و دسترسی به تمامی آبجکت‌های موجود در کیوت نیاز به کلاس QObject خواهیم داشت. بنابراین فایل هدر آن را در فایل خود افزوده‌ایم. فضای نام Contact سپس اعلان کلاس مشتق شده از کلاس QObject مشخص کرده و سپس برای فعال سازی امکان استفاده از سرویس متا آبجکت (به عنوان یک مکانیزم) برای دسترسی به سیگنال‌ها و اسلات‌ها در کیوت از ماکروی Q_OBJECT استفاد می‌کنیم. شکل کلی ماکروی Q_PROPERTY Q_PROPERTY(type name (READ getFunction [WRITE setFunction] | MEMBER memberName [(READ getFunction | WRITE setFunction)]) [RESET resetFunction] [NOTIFY notifySignal] [REVISION int] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL]) ماکروی Q_PROPERTY جهت اعلان ویژگی‌های موجود در اشیاء کلاس به کار گرفته شده است که از کلاس QObject ارث بری می‌کند. در نظر داشته باشید که این ویژگی‌های موجود در اصل همانند اعضای موجود در کلاس‌ها رفتار می‌کنند، با این تفاوت که در اینجا امکانات و ویژگی‌های اضافی بر اساس مکانیزم سیستم متا آبجکت کیوت را ارائه می‌دهند. ویژگی‌های نام، نوع و تابع READ ضروری هستند. نوع می‌تواند هر نوعی را توسط QVariant پشتیبانی کند، یا توسط کاربر نوع مورد نیاز تعریف شود. آیتم‌های دیگر اختیاری هستند، اما یک تابع WRITE رایج است. صفات‌های دیگر به صورت پیشفرض به جز USER که به صورت پیش‌فرض false است همگی true می‌باشند. برای مثال Q_PROPERTY(QString title READ title WRITE setTitle USER true) بر اساس همین روش ما پارامتر‌های کلاس را اعلان و در نهایت توابع، سیگنال‌ها و اعضای خصوصی کلاس را بر اساس نیاز اعلان کرده‌ایم. تعریف کلاس و توابع آن در ادامه به صورت زیر آمده است: // // File : contactlist.cpp // Class or Function (ContactList) // // Created by Kambiz Asadzadeh on 2018/7/19. // Copyright © 2018 Kambiz Asadzadeh. All rights reserved. // Official Website : http://kambizasadzadeh.com // Powered by : Dotwaves LLC (http://dotwaves.com) // #include "contactlist.h" using namespace Contact; ContactList::ContactList(QObject *parent) : QObject(parent) { } ContactList::ContactList( const QString &name, const QString &family, const QString &phone, const QString &device, const QString &avatar, const QString &color, const QString &url, QObject *parent ) : QObject(parent), m_name (name), m_family (family), m_phone (phone), m_device (device), m_avatar (avatar), m_color (color), m_url (url) { } ContactList::~ContactList() {} QString ContactList::name() const { return m_name; } void ContactList::setName(const QString &name) { if (name != m_name) { m_name = name; emit nameChanged(); } } QString ContactList::family() const { return m_family; } void ContactList::setFamily(const QString &family) { if (family != m_family) { m_family = family; emit familyChanged(); } } QString ContactList::phone() const { return m_phone; } void ContactList::setPhone(const QString &phone) { if (phone != m_phone) { m_phone = phone; emit phoneChanged(); } } QString ContactList::device() const { return m_device; } void ContactList::setDevice(const QString &device) { if (device != m_device) { m_device = device; emit deviceChanged(); } } QString ContactList::avatar() const { return m_avatar; } void ContactList::setAvatar(const QString &avatar) { if (avatar != m_avatar) { m_avatar = avatar; emit avatarChanged(); } } QString ContactList::color() const { return m_color; } void ContactList::setColor(const QString &color) { if (color != m_color) { m_color = color; emit colorChanged(); } } QString ContactList::url() const { return m_url; } void ContactList::setUrl(const QString &url) { if (url != m_url) { m_url = url; emit urlChanged(); } } توجه داشته باشید که هر یک از توابع مقادیر ورودی را در قالب پارامتر‌های ثابت دریافت و در صورتی که اعضای موجود در کلاس مقداری نداشته باشند برابر با پارامتر ورودی خواهند بود. سپس در صورتی که مقدار آن‌ها تغییر یافت وضعیت تغییر آن‌ها توسط emit به عنوان یک پیش‌پردازنده‌ی از قبل تعریف شده کیوت انتشار (ساطع) خواهد شد. بعد از اعلان و تعریف کلاس مربوطه در فایل main.cpp لیستی را به عنوان داده‌های ارسالی ایجاد می‌کنیم که به صورت زیر آمده است: #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include "contactlist.h" using namespace Contact; int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QList<QObject*> dataList; dataList.append(new ContactList("کامبیز", "اسدزاده", "09140000000", "Apple iPhone", "https://avatars0.githubusercontent.com/u/4066299?s=460&v=4", "#00D397", "https://github.com/Kambiz-Asadzadeh")); dataList.append(new ContactList("حامد", "مصافی", "09350000000", "Samsung Galaxy", "https://avatars2.githubusercontent.com/u/13809362?s=460&v=4", "#E83B0B", "https://github.com/HamedMasafi")); dataList.append(new ContactList("بهنام", "صباغی", "09190000000", "Google Nexus", "https://avatars3.githubusercontent.com/u/17690495?s=460&v=4", "#E15504", "https://github.com/FONQRI")); dataList.append(new ContactList("آرش", "میلانی", "09140000000", "Apple iPhone", "https://avatars3.githubusercontent.com/u/586816?s=460&v=4", "#3650F7", "https://github.com/arashmilani")); dataList.append(new ContactList("سروش", "ربیعی", "09190000000", "Google Nexus", "https://avatars0.githubusercontent.com/u/920670?s=460&v=4", "#8C56EA", "https://github.com/soroush")); QQmlApplicationEngine engine; QQmlContext *ctxt = engine.rootContext(); qmlRegisterType<ContactList>("api.dotwaves.qml", 1, 0, "Data"); ctxt->setContextProperty("contactModel", QVariant::fromValue(dataList)); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); } تحت کلاس QList اشیاء را به کلاس ساخته شده سفارشی خود به عنوان داده‌های جدید معرفی می‌کنیم. جهت رجیستر (ثبت) کردن کلاس و داده‌های سمت بک‌اِند به سمت فرانت اِند در QML توسط تابع qmlRegisterType به عنوان یک تابع سربار گذاری شده اقدام می‌کنیم که ساختار آن به صورت زیر است: qmlRegisterType<MyClass>("com.mycompany.qmlcomponents", 1, 0, "CppClass"); این کار باعث می‌شود شما به کلاس‌ها و توابع کلاس سفارشی خود در سمت فرانت اند دسترسی داشته باشید. این روش در این پروژه اختیاری بوده است و فعلاً آنچنان مهم نیست اما برای اینکه روش آن را بدانید آورده شده است. در ادامه با نمونه گیری کلاس QQmlContext تابع setContextProperty که به عنوان ریشه‌ای از محتوا مجموعه‌ای از خواص‌های موجود از مُدل کلاس را بر می‌گرداند را تنظیم می‌کند که نام ویژگی را در قالب QVariant برمی‌گرداند. در نهایت قرار است با استفاده از نوع ListView در سمت QML مقادیر ارسالی از سمت سی‌پلاس‌پلاس را دریافت کنیم. به عنوان مثال دریافت نام به صورت زیر خواهد بود: ListView { id:listview model : contactModel delegate: Rectangle { .... ....... Text { id: nameTitle text: model.modelData.name } } نمونه خروجی این مثال به صورت زیر است: برای دسترسی به منبع این مثال می‌توانید به گیت‌هاب من در این لینک مراجعه کنید.
  3. با نگاهی به الگوی جستجو تحت الگوریتم Boyer-Moore در استاندارد جدید یعنی C++17 می‌توان به کنترل بیشتر و حتی سرعت بسیار بالاتری نسبت به کتابخانه‌ی Boost رسید. با استاندارد ۱۷ در سی‌پلاس‌پلاس، اکنون می‌توانید از الگوریتم‌های پیشرفته‌تر و بهتری در عین حال سریعتری برای جستجو استفاده کنید. از این پس، شما می‌توانید کنترل بیشتر و همچنین افزایش کارآیی امیدوار کننده ای در بسیاری از موارد داشته باشید. معرفی روش‌های ساده تری برای یافتن الگو در یک رشته O (nm) جایی که n طول تمام رشته است و m طول الگو است وجود دارد. این روش‌ها به عنوان روش‌های دوم و بهتری می‌توان در نظر گرفته شوند. در C++17 الگوریتم جستجو در استاندارد std::search به دو روش زیر به‌روز رسانی شده است: از این پس شما می‌توانید از قانون مجوز استفاده از نسخه‌ی پیش‌فرض الگوریتم استفاده کنید، اما به صورت موازی. شما می‌توانید یک شیء جستجوگر برای مدیریت جستجو فراهم کنید. بنابراین فعلاً ما سه نوع جستجوگر خواهیم داشت: default_searcher boyer_moore_searcher boyer_moore_horspool_searcher پیش‌پردازش هر دو الگوریتم Boyer Moore و Boyer Moore Horspool از برخی اطلاعات در رابطه با رشته الگو استفاده می‌کنند تا بتوانند مقایسه‌های بی نظیری را انجام دهند. به منظور هوشمندانه‌تر شدن هر یک از الگوریتم‌ها یک عمل پیش‌پردازشی را انجام می‌دهند که الگوی ورودی را تحلیل می‌کند. پیچیدگی پیش‌پردازش معمولاً به اندازه‌ی الفبای رشته بستگی دارد. الگوریتم Horspool یک نسخه‌ی ساده از Boyer Moore (با تنها قوانین کاراکتر بد) و استفاده از جداول داخلی کوچکتر بیان می‌شود. پیچیدگی متوسط خطی است، اما بدترین حالت ممکن است O(mn) باشد. در کتابخانه‌ی Boost (بوست) اگر شما با کتابخانه‌ی بوست کار کرده اید، ممکن است شما با الگوریتم‌های جستجو آشنا باشید. در نسخه‌ی ۱.۵۰ (در تاریخ ژوئن ۲۰۱۲ میلادی) مجموعه‌ی جدیدی از الگوریتم‌ها به کتابخانه اضافه شده است. در کتابخانه سه شیء جستجوگر وجود دارد: الگوریتم جستجوی Boyer-Moore الگوریتم جستجوی Boyer-Moore-Horspool الگوریتم جستجوی Knuth-Morris-Pratt نحوه‌ی استفاده چگونه است؟ در سی‌پلاس‌پلاس ۱۷ سه نوع سربار اضافی بر روی ویژگی‌های std::search اضافه شده است. template<class ForwardIterator, class Searcher> ForwardIterator search( ForwardIterator first, ForwardIterator last, const Searcher& searcher ); هر جستجوگر معمولاً دو ورودی تکرار کننده را می‌گیرند. شروع و پایان الگو، و سپس یک پیشفرض باینری که معمولاً آن با عملگر برابر است. آن‌ها ممکن است از پارامتر‌های دیگر نیز استفاده کنند، برای مثال، یک تابع هَش (مخلوط) کننده. در کل، شما می‌توانید آن را به صورت زیر استفاده کنید: std::string testString = "Hello Super World"; std::string needle = "Super"; auto it = search(testString.begin(), testString.end(), boyer_moore_searcher(needle.begin(), needle.end())); if (it == testString.end()) cout << "The string " << needle << " not found\n"; برخی از آزمون‌های پایه برای آزمایش مخزنی ارائه شده است که در آن نمونه کُد آن آمده است. در این مثال نمونه‌هایی نوشته شده است که برخی از آن‌ها کارایی و سرعت بسیار خوبی را در الگوریتم‌های جدید با استفاده از MSVC نشان می‌دهد. آزمایش‌ها چطور کار می‌کنند؟ برنامه یک فایل را بارگذاری می‌کند، مانند کتابی که شامل متنی با ۵۰۰ کیلوبایت اندازه است. تمام محتوای فایل در یک رشته‌ی ورودی ذخیره می‌شود. یک الگو انتخاب شده است که N آخرین حرف از رشته ورودی است. برنامه از چندین الگوریتم استفاده می‌کند و بارها در جستجو هر یک از ITER ها را اجرا می‌کند. برای مثال نسخه‌ی std::string::find به صورت زیر آمده است: RunAndMeasure("string::find", [&]() { for (size_t i = 0; i < ITERS; ++i) { std::size_t found = testString.find(needle); if (found == std::string::npos) std::cout << "The string " << needle << " not found\n"; } }); نسخه‌ی boyer_moore_horspool به صورت زیر: RunAndMeasure("boyer_moore_horspool_searcher", [&]() { for (size_t i = 0; i < ITERS; ++i) { auto it = std::search(testString.begin(), testString.end(), std::boyer_moore_horspool_searcher( needle.begin(), needle.end())); if (it == testString.end()) std::cout << "The string " << needle << " not found\n"; } }); در اینحا نتیجه بر روی سخت افزار با پردازنده‌ی i7 4720HQ و Win 10 همراه با MSVC 2017 15.8 ریلیز ۶۴ بیت می‌باشد. الگو از ۱۰۰۰۰ حرف انتهای متن ورودی تشکیل شده است: .\searchers.exe ..\..\SampleBooks\book-test.txt 1000 10000 string length: 547412 test iterations: 1000 pattern length: 10000 string::find: 693.449 ms default searcher: 1102.25 ms boyer_moore_searcher: 133.558 ms boyer_moore_horspool_searcher: 37.0234 ms الگو در اینجا اکنون ۱۰۰ حرف آخر از متن ورودی است: .\searchers.exe ..\..\SampleBooks\book-test.txt 1000 200 string length: 547412 test iterations: 1000 pattern length: 200 string::find: 158.612 ms default searcher: 467.518 ms boyer_moore_searcher: 58.8752 ms boyer_moore_horspool_searcher: 56.7017 ms البته توجه داشته باشید که، نتایج نمونه نیاز به تحقیق بیشتری دارند. برای مثال در الگو‌های کوتاه، استفاده از روش string::find معمولاً سریعتر است. بنابراین، الگوریتم Horspool سریعتر از الگوریتم boyer_moore در این مورد بوده است. واقعیت مهم در مورد std::search این است که آن یک الگوریتم عمومی است! بنابراین شما می‌توانید آن را فقط برای رشته‌ها استفاده کنید. در اینجا مثالی آورده شده است که برای جستجوی یک الگو از شماره‌های موجود در یک بردار از عدد‌های صحیح است. std::vector<int> testVector(1000000); std::iota(testVector.begin(), testVector.end(), 0); std::vector vecNeedle(testVector.end() - 1000, testVector.end()); auto it = std::search(testVector.begin(), testVector.end(), std::boyer_moore_horspool_searcher( vecNeedle.begin(), vecNeedle.end())); if (it == testVector.end()) std::cout << "The pattern " << needle << " not found\n"; خلاصه‌ی نتیجه در این مقاله به صورت مختصر در رابطه با قابلیت‌های جدیدی را که در سی‌پلاس‌پلاس ۱۷ دریافت کرده ایم اشاره شده است. مهم این است که بدانید الگوریتم‌های جدید همیشه سریعتر از std::string::find (برای رشته‌ها) نیستند. منبع : Dzone
  4. علی رشیدی

    با درود، وجود کتابخانه‌های متعدد برای توسعه‌ی ربات‌های تلگرام برای زبان‌ها و چهارچوب‌های مختلف، و عدم وجود یک کتابخانه به‌روز برای ++C و کیوت باعث شد تا توسعه‌ی این پروژه را آغاز کنم. امیدوارم این پروژه برای توسعه‌دهندگان مفید واقع شود. عنوان: پروژه‌ی TarnaBot توضیحات: یک کتابخانه بر پایه فریم‌ورک کیوت (Qt) که به توسعه‌دهندگان امکان برنامه‌نویسی ربات‌های تلگرام را می‌دهد. زبان‌ها و فناوری‌های استفاده شده: ++C فریم‌ورک ها و کتابخانه‌ها: کیوت (Qt) نسخه ۵ ابزارِ ساخت: qmake نوع پروژه: متن باز (Open source) مجوز: LGPL v3 نویسندگان: علی رشیدی وضعیت: در حال توسعه - پایدار (stable) مثال‌ها و مستندات به زودی اضافه خواهند شد.
  5. مراحل ساخت برنامه‌ در زبان سی‌پلاس‌پلاس پیش نویس ۰.۶ قبل از هر چیز به اینفوگرافی زیر توجه کنید که مراحل ساخت برنامه در سی‌پلاس‌پلاس را نشان می‌دهد. مقدمه‌ای بر همگردانی (کامپایل) و اتصال (لینک کردن) این سند مرور مختصری در رابطه با مراحل را برای شما فراهم می‌کند تا به شما در درک دستورات مختلف برای تبدیل و اجرای برنامه‌ی خودتان کمک کند. تبدیل مجموعه‌ای از فایل‌های منبع و هدر در سی‌پلاس‌پلاس به یک فایل خروجی و اجرایی در چندین گام (به طور معمول در چهار گام) پیش‌پردازنده (Preprocessors)، کامپایل و گرد‌آوری (Compilation)، اسمبلر (Assmbler) و پیوند دهنده (Linker) تقسیم می‌شود. قبل از هر چیز اگر در محیط توسعه‌ی Qt Creator داخل فایل .pro مقدار زیر را وارد کنید، تا بتوانید فایل‌های ساخته شده‌ی موقت در زمان کامپایل را مشاهده کنید. QMAKE_CXXFLAGS += -save-temps تعریف پیش‌پردازنده پیش‌پردازنده‌ها (Preprocessors) درواقع دستوراتی هستند که اجازه می‌دهند تا کامپایلر قبل از آغاز کردن مراحل کامپایل دستوراتی را دریافت کند. پیش‌پردازنده‌ها توسط هشتگ (#) مشخص می‌شوند این نماد در سی‌++ مشخص میکند که دستور فوق از نوع پیش‌پردازنده می‌باشد که نتیجه‌ی آن در قالب ماکرو (Macro) در دسترس خواهد بود. برای مثال ماکروی __DATE__ توسط پیش‌پردازنده‌ها از قبل تعریف شده است که مقدار تاریخ و زمان را بازگشت می‌دهد. بنابراین هرکجا که از آن استفاده شود کامپایلر آن را جایگزین متن خواهد کرد. در شکل زیر مرحله‌ای که از پیش‌پردازنده‌ها استفاده می‌شود آمده است: پیش‌پردازنده، کامپایل (گردآوری کردن)، لینک (پیوند کردن) و ساخت برنامه اجرایی فرایند تبدیل مجموعه‌ای از فایل‌های متنی هِدر و سورس سی‌++ را «ساخت» یا همان Building می‌گویند. از آنجایی که ممکن است کُد پروژه در بسیاری از فایل‌ها هدر و سورس سی++ توسعه و گسترش یابدمراحل ساخت در چند گام کوچک صورت می‌گیرد. یکی از رایج‌ترین موارد در مراحل گردآوری (ترجمه‌ی یک کد سی‌پلاس‌پلاس به دستورالعمل‌های قابل فهم ماشین) است. اما گام‌های دیگری نیز وجود دارد، پیش‌پردازنده و لینک (پیوند‌ها) این بخش به طور خلاصه توضیح می‌دهد که چه اتفاقی در هر یک از مراحل رُخ می‌دهد. یک کامپایلر یک برنامه‌ی خاص است که پردازش اظهارات (دستورات) نوشته شده در یک زبان برنامه‌نویسی خاص را به یک زبان ماشین که قابل فهم برای پردازنده می‌باشد تبدیل کند. به طور معمول یک برنامه‌نویس با استفاده از یک ویرایشگر که به محیط توسعه‌ی یکپارچه‌ی نرم‌افزار (IDE) مشهور است توسط زبان برنامه‌نویسی مانند ++C دستورات (اظهارات) را می‌نویسد. فایل ایجاد شده با نام (filename.cpp در زبان برنامه‌نویسی سی‌پلاس‌پلاس) شامل محتوایی است که معمولاً به عنوان دستورات برنامه‌نویسی سطح بالا نامیده می‌شود. سپس برنامه‌نویس کامپایلرِ مناسب برای زبان برنامه‌نویسی مانند سی++ را اجرا می‌کند و نام فایل‌هایی که حاوی دستورات هستند را برای کامپایل مشخص می‌کند که این انتخاب و مشخص سازی توسط IDE به راحتی قابل مدیریت است. پس از آن، کار کامپایلر این است که فایل‌های منبع .cpp را جمع آوری کرده و پیش‌پردازنده‌ها را بررسی کند تا دستورات احتمالی را اجرا نماید که نتیجه‌ی این مرحله در فایلی با پسوند .ii ر قالب filename.ii تولید می‌شود که در این فرایند نیز خط به خط کُد‌های موجود در آن‌ها را بررسی می‌کند تا خطاهای احتمالی نحو (سینتکس - Syntax) بررسی می‌شود و آن‌ها را به طور ترتیبی به دستورالعمل‌های سطح ماشین تبدیل کند. توجه داشته باشید که هر نوع پردازنده‌ی کامپیوتر دارای مجموعه‌ای از دستورالعمل‌هایِ ماشین خودش است. بنابراین کامپایلر تنها برای سی++ نیست، بلکه برای اهداف و مقاصدخاص هر پلتفرم است. پس کد‌هایی که توسط پیش‌پردازنده سی‌پلاس‌پلاس به زبان اسمبلی برای معماری مورد نظر در پلتفرم مقصدترجمه شده‌اند نتایج آن در فایلی با پسوند .ss در قالب filename.ss قابل نمایش هستند که در حالت عادی قابل رویت نیست. توجه داشته باشید که باید در این مرحله باید مشخص شود برنامه قرار است توسط چه نوع پردازنده‌ای تحتِ چه نوع معماری مونتاژ (اسمبل) شود. برای مثال پردازنده‌ها با انواع معماری‌های مختلف وجود دارند که برخی از آن‌ها به صورت x86-x64، x64، ARMv7، aarch64 غیره ... می‌باشند. شکل یک (کامپایل یک فایل منبع ++C) مرحله‌ی سوم را در نظر داشته باشید که عمل کامپایل فایل سی‌پلاس‌پلاس در دو مرحله قبلی یک فایل اجرایی را تولید نمی‌کند. برنامه‌ای که توصیف شده است، احتمالاً توابعی را در رابط‌های برنامه‌نویسی (API) و یا توابع ریاضی یا توابع مرتبط با I/O را فراخوانی کند که ممکن است شامل فایل‌های هدر مانند iostream یا fstream و حتی ماژول‌های دیگری که در زبان‌ تعبیه شده‌اند را داشته باشد که فایل تولید شده توسط کامپایلر در این مرحله یک فایل شیء نامیده می‌شود که با پسوند .o به صورت filename.o تولید خواهد شد که علاوه بر دستورالعمل‌های تبدیل شده به کد ماشین، شامل توابع و دستورالعمل‌های خارجی نیز می‌باشد. هرچند در این مرحله دستورات تبدیل به دستورالعمل‌های قابل فهم توسط پردازنده شده‌اند اما فعلاً قابل اجرا نیستند چرا که باید این توابع خارجی افزوده شده را به آن لینک کرد که در مرحله‌ی بعد یعنی مرحله‌ی چهارم اتفاق می‌افتد. در نهایت مرحله‌ی چهارم فایل با پسوند .o که شامل کد‌های تولید شده توسط کامپایلر به زبان ماشین است که پردازنده‌ها می‌توانند این دستورات را درک کنند که همراه با کد‌های تولید شده‌ی هر کتابخانه‌ی دیگری که مورد نیاز است توسط لینکر (لینک شده) و در نهایت جهت تولید یک فایل اجرایی مورد استفاده قرار می‌گیرند که نوع آن فایل از نوع اجرایی یا در واقع Executable File خواهد بود. شرح کامل فرایند ساخت فایل اجرایی اکثر پروژه‌ها دارای مجموعه‌ای از فایل‌های هدر سی++ هستند، که امکان ماژولار شدن در آن را فراهم می‌کند و مجموعه‌ای از آن می‌تواند به عنوان بخش‌های کوچکی از برنامه محسوب شوند. برای ساخت چنین پروژه‌هایی هر فایل سی‌پلاس‌پلاس باید کامپایل شود و سپس فایل‌های ساخته شده در قالب شیء (آبجکت) باید همراه توابع و کتابخانه‌های دیگر لینک (پیوند) شوند. البته هر گام از مراحل کامپایل شامل یک مرحله پیش‌پردازنده است که دستورالعمل # عمل تغییرات و اصلاحیه‌ها را در فایل متن اعمال می‌کند. شکل زیر فرایند ساخت چند فایل به صورت همزمان را نشان می‌دهد:
  6. کامبیز اسدزاده

    با سلام، همانطور که می‌دانید سیستم‌‌های مدیریت محتوا به عنوان سیستم پویا برای مدیریت محتوای یک وب‌سایت بسیار مفید هستند. حال آنکه یک سیستم مدیریت محتوا فراتر از یک سیستم نرم‌افزاری جهت مدیرین محتوای وب‌سایت توسعه یابد بسیار مفید خواهد بود. قابلیت‌ها و ویژگی‌ها با استفاده از سیستم مدیریت محتوای جگوار (Jaguar) ما می‌توانیم برای مشتریان خود یک سیستم مدیریت چند منظوره با قابلیت‌های کاملاً پویا ارائه دهیم که هر استارتاپی می‌تواند کسب‌و‌کار خود را تحت آن توسعه دهد. این سیستم دارای قابلیت‌های چند سکویی و چند منظوره می‌باشد که یکی از قابلیت‌های برجسته‌ی آن پشتیبانی از سیستم چند زبانه می‌باشد. این سیستم در پلتفرم‌های وب، موبایل و دسکتاپ توسعه داده شده است. عنوان: پروژه‌ی جگوار (Jaguar) توضیحات: سیستم مدیریت محتوای چند منظوره و پیشرفته زبان‌ها و فناوری‌های استفاده شده: زبان‌های PHP، C++، JavaScript، QML فریم وُرک‌ و کتابخانه‌ها: کتابخانه‌ی STL, Zend, Qt,, OpenSSL، BootStrap4 ابزار‌های ساخت: qmake، qbs و cmake نوع پروژه: تجاری (انحصاری شرکتِ Dotwaves LLC) نویسندگان: کامبیز اسدزاده وضعیت: در حال توسعه حق چاپ و تکثیر: شرکت دات‌ویوز این محصول بر پایه موتور جِنسیس توسعه داده شده است. برخی از تصاویر مرتبط با این محصول:
  7. با سلام و خسته نباشید چطوری میتوان دیتابیس موجود در شبکه اینترنت را خواند ودر کلاینت نشان داد دوستان اگه کسی اطلاعاتی در این مورد داره راهنمایی کنه
  8. درود مدتی است که بنده در زمینه تعمیرات نرم افزار موبایل شروع به برنامه نویسی کردم. اکنون پروژه من به جایی رسیده باید بتونم توسط سی‌پلاس‌پلاس برنامه ای بنویسم (در محیط کیوت) که فایل های سیستمی (کرنل های فریمور) گوشی های سامسونگ رو از طریق کامپیوتر به گوشی در حالت دانلودینگ ارسال بشه (گوشی فلش بشود تا سیستم جدید بر روی دستگاه سامسونگ نصب گردد). این عمل باید از طریق پورت سریال انجام بشه و تا جایی که تونستم گوگل کردم و در stackflow هم به طرح پرسش مربوط پرداختم اما جوابی نگرفتم. برای آشنایی بیشتر میتوانید نحوه فلش گوشی سامسونگ با نرم افزار ادین را گوگل کنید. پس به عبارتی ما می‌خواهیم نسخه سفارشی از نرم افزار ادین را بسازیم. ممنون میشم راهنمایی کنید. با تشکر
  9. amirb

    با سلام. سوالی که داشتم این هست که چطور میشه به وسیله‌ی Qml یک عکس رو آپلود کرد؟ آیا کسی تا حالا این کار رو انجام داده؟ من فقط می‌خوام از کد Qml استفاده کنم ولی اگه مجبور شدم از C++ هم استفاده می کنم.
  10. کامبیز اسدزاده

    کتاب آموزش مقدماتی ++C همراه Qt (مقدماتی)

    نگارش 4.0

    هدف از این آموزش ها آشنایی با امکاناتی که در Qt میتوان استفاده کرد می‌باشد، که شامل کد نویسی کمتر، خروجی و طرح های بیشتر و در نهایت استفاده در پلتفرم های مورد مختلف است. لذا جهت بهره مندی از این کتابخانه ما با در نظر گرفتن اینکه علاقه مندان با زبان ++C آشنایی لازم را دارند منتشر کرده ایم. بنابراین در صورتی که علاقه مندان اطلاعات کافی در رابطه با خود زبان ندارند پیشنهاد میکنیم ابتدا اقدام به تهیه و مطالعه آموزش های لازم در ++C نمایند که برخی از لینک های رسمی و استاندارد آن را در زیر اعلام نموده ایم. عنوان این آموزش "برنامه نویسی ++C همراه با کتابخانه های Qt 5.7.x (سطح مقدماتی ویرایش ۳) می‌باشد که به صورت زیر فهرست بندی شده است: فصل اول مقدمه کتابخانه Qt قابلیت ها در طراحی فناوری Qt Quick و QML نسخه های کیوت مجوز های موجود در این کتابخانه محیط های توسعه کیوت ویژگی های کیوت پشتیبانی از انواع سیستم عامل ها نصب و پیکربندی Qt فصل دوم انواه پروژه و ایجاد آن انواع پروژه ها ایجاد پروژه فصل سوم ساده ترین برنامه معرفی و کار با Signal و Slot ها و Event ها معرفی و کار با نمایش Windows معرفی و کار با لایه ها زبانه ها و بدنه های در طراحی معرفی و کار با قابلیت های HTML و CSS در طراحی فصل چهارم معرفی و کار با لایه های افقی و عمودی معرفی و کار با لایه های Grid در طراحی فرم معرفی و کار با جدا کننده ها Splitter فصل پنجم معرفی و کار با دایرکتوری ها معرفی و کار با فایل ها / خواندن و نوشتن در آن ها فصل ششم معرفی و کار با برچسب ها Label معرفی و کار با دکمه ها Button معرفی و کار با کنترل ورودی LineEdit معرفی و کار با چک باکس CheckBox معرفی و کار با RadioButton معرفی و کار با Combobox معرفی و کار با لیست ها / ListWidget معرفی و کار با لیست های درختی / TreeWidget معرفی و کار با Action ها معرفی و کار با Slider و Progress ها معرفی و کار با Statusbar در فرم فصل هفتم معرفی و کار با MessageBox معرفی و کار با Timer معرفی و کار با Thread ها فصل هشتم معرفی و کار با Map معرفی و کار با Hash معرفی و کار با QStringList لیست رشته ای فصل نهم معرفی و کار با الگوریتم های معرفی و کار شبکه / دانلود فایل بر اساس پروتکل های HTTP و FTP معرفی و کار با باینری و سریالیز کردن آبجکت ها معرفی و کار با TextStream ها فصل دهم مقایسه انواع حالت های کامپایل در Qt نحوه افزودن دیگر کتابخانه های C++‎‎ در محیط Qt Creator و استفاده همراه با کتابخانه Qt نحوه خروجی گرفتن / گسترش (Deployment) در Qt مقایسه و پیکربندی دو موتور قدرتمند OpenGL و ANGLE در پروژه مقایسه حجمی بین پروژه های ساخته تحت کتابخانه های Qt در ++C و .NET Framewok در #C درایور دیتابیس هایی که تحت این کتابخانه پشتیبانی می‌شوند حق نشر کتاب و اهداف در نسخه ی بعدی کتاب توجه : در داشتن هر گونه انتقاد و پیشنهاد در رابطه با این کتاب با آدرس شخصی نویسنده (kambiz.ceo@gmail.com) مکاتبه نمایید. نکته : این کتاب در روز‌های خاص ممکن است شامل تخفیف قرار بگیرد. نکته دوم : کسانی که این کتاب را یک بار خریداری می‌کنند نسخه‌ی به روز رسانی شده آن را به صورت رایگان می‌توانند دریافت کنند.

    200٬000 ریال

  11. این تاپیک مخصوص نمونه مثال‌هایی از پروژه‌ها، ماژول‌ها، کامپوننت‌ها و افزونه‌هایی می‌باشد که به صورت استاندارد و مدرن توسط سی‌پلاس‌پلاس و جاوا‌اسکریپت تحت فناوری Qt Quick طراحی می‌شوند. بدون هیچگونه تعارفی باید بگوییم هر نرم‌افزار (اپلیکیشن) و یا محصولی که ساخته می‌شود باید مطابق استاندارد‌هایی که مهندسین طراحی بر روی آن تاکید دارند توسعه یابد. این استاندارد‌ها ممکن است شامل اصول کُدنویسی، الگو‌های کد‌نویسی و یا قوانین روانشناسی رنگ‌ها، چیدمان اشیاء و هر موردی که می‌تواند در نتیجه‌ی آن تاثیر مثبت داشته باشد مهم هستند. با هدف اینکه می‌خواهیم نمونه مثال‌هایی را برای تازه واردین قرار دهیم تا بتوانند به درستی ونحوه‌ی صحیح طراحی و پیاده سازی دو بخش بک‌اِند و فرانت‌اِند آشنا شوند، نمونه مثال‌های شما باید دارای شرایط زیر باشند ساختار استاندارد کلاس‌ها و توابع در سمت سی‌پلاس‌پلاس استفاده از اشاره گر‌های هوشمند و یا رعایت اصول مدیریت حافظه استفاده از ماکرو‌های سفارشی iOS، Android، Windows، macOS و لینوکس جهت مدیریت بهتر بعضی از ویژگی‌های منحصربفرد سیستم‌عامل‌ها تا جایی که می‌توانید سعی کنید از ابزار‌های qmake و qbs در این نمونه مثال‌ها استفاده کنید رعایت رنگ‌بندی و همچنین اصول UX درست مهم است مثال شما باید برگرفته و بر اساس استاندارد‌های توصیه شده‌ی doc.qt.io باشد. استفاده‌ی بهینه از لنگر‌ها و همچنین ترازبندی صحیح لایه‌ها و نگه‌دارنده‌ها در سمت QML استفاده از تصاویر و یا قالب‌های استاندارد و سبک مانند SVG, PNG و base64 استفاده از فونت آیکونیک‌ها مانند (FontAwesome) این پست ممکن است ویرایش و یا به روز‌رسانی شود. در ادامه شما می‌توانید بر اساس شرایطی که ذکر شده است و با توجه به استاندارد‌های Google Material، Microsoft Fluent و همچنین Apple Human Interface نمونه مثال‌های خود را ارائه دهید که برخی از مثال‌های استاندارد در زیر آمده اند.
  12. کامبیز اسدزاده

    کیوت برای وب‌ اسمبلی

    وب‌اسمبلی (WebAssembly) یا wasm یک زبان برنامه‌نویسی سطح پایین برای استفاده در مرورگر است که در حال حاضر در حال توسعه است. هدف اولیهٔ آن پشتیبانی حمایت از کامپایل از سی و سی++ است هرچند که قرار است از سایر زبان‌ها نیز حمایت شود. حال کتابخانه‌ی Qt این امکان را تحت ماژول Qt WebAssembly فراهم می‌کند تا برنامه‌‌ی نوشته شده توسط سی++ و کیوت در محیط مرورگر قابل اجرا باشند. این ویژگی در حال حاضر به عنوان پیش‌نمایش برای نسخه‌ی Qt 5.11 برنامه‌ریزی شده است. کیوت برای ساخت وب اسمبلی دستور‌العمل‌هایی را در اینجا آورده است. قبل از هرچیز شما نیاز دارید تا ابزار کامپایلر emsdk را آماده و نصب نمایید. بنابراین دستورات زیر را به ترتیب اجرا کنید. # Get the emsdk repo git clone https://github.com/juj/emsdk.git # Enter that directory cd emsdk # Fetch the latest registry of available tools. ./emsdk update # Download and install the latest SDK tools. ./emsdk install latest # Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file) ./emsdk activate latest # Activate PATH and other environment variables in the current terminal source ./emsdk_env.sh در صورتی که در پیکربندی نیاز به راهنمایی دارید از راهنمای اصلی آن استفاده کنید و یا در همین مرجع در تالار‌های گفتمان از ما بپرسید. ما به این ابزار به عنوان ابزار کامپایل-چند‌منظوره استفاده خواهیم کرد. برخی از اسکرین شات‌ها از نتایج خروجی این ماژول به صورت زیر آمده‌اند: یک بازی ساده به نام Colliding mice ویژگی پنجره‌های گفتگو به نظر می‌رسد پنجره‌های ساخته شده توسط QOpenGLWindow با فریم ریت ۶۰ به خوبی عمل می‌کنند. البته به نظر می‌رسد QOpenGLWidget فعلاً شامل برخی از مشکلات است که حل خواهند شد. کامپایلر Emscripten که به عنوان یک کامپایلر منبع‌باز که بک اند آن بر روی LLVM اجرا می‌شود کُد‌های OpenGL را به WebGL ترجمه می‌کند. بنابراین محدودیت‌هایی در نسخه‌های دسکتاپ و اِمبد‌ها وجود خواهد داشت. نمونه مثال پنجره تحت OpenGL در کنار این‌ها QtBases و QtDeclarative که از شاخه‌ی Wip/Web Assembly استقاده می‌کنند، ماژول‌های شناخته شده‌ی کیوت به صورت زیر به کار گرفته می‌شوند: QtCharts QtGraphicalEffects QtQuickControls QtQuickControls2 QtWebSockets QtMqtt (با استفاده از وب سوکت) برای استفاده از QtMqtt، شما باید کلاس WebSocketIODevice از نمونه مثالی با نام (websocketsubscription) وارد برنامه‌ی خود کنید. نمونه مثال‌های ساعت در QML نکته: از آن‌جا که جاوا‌اسکریپت و وب‌اسمبلی تنها یک نخ (Thread) دارند، QtDeclarative تنها برای یک نَخ (ترد) کار خواهد کرد. در نظر داشته باشید که ماژول‌های QtCharts QtGraphicalEffects، QtQuickcontrols، QtQuickControls2 بدون هیچ تغییراتی کار می‌کنند. ماژول QtChart از نمونه مثال oscilloscope این پروژه به عنوان یک رویکرد جدید و ویژگی‌ای که در آینده می‌تواند مفید باشد در حال توسعه است. بخش ویکی رسمی آن در این لینک آورده شده است.
  13. کامبیز اسدزاده

    اسکریپتینگ در ++C

    کامپایلر Cling یک مترجم تعاملی برای سی‌پلاس‌پلاس است، این مترجم تحت بالاترین کتابخانه‌های Clang و LLVM ساخته شده است. در واقع از آن‌جایی که کامپایلر Clang از آخرین ویژگی‌ها و استاندارد‌های زبان سی‌پلاس‌پلاس پشتیبانی می‌کند، Cling اجازه می‌دهد تا توسعه‌دهندگان اسکریپت‌های خود را با استفاده از C و C++ بنویسند. اگر شما به طور مستقیم مترجم را اجرا کنید، یک محیط زنده برای آغاز برنامه نویسی با سی‌پلاس‌پلاس را خواهید داشت که به عنوان بخشی از استاندارد نحو سی و سی‌پلاس‌پلاس به شمار می‌آید. همچنین می‌توانید دیگر دستورات را با نقطه‌ی "." آغاز در اختیار داشته باشید. وقتی از مترجم تعاملی استفاده می‌کنید، می‌توانید کد زیر را بنویسید: #include <stdio.h> printf("hello world\n"); همانطور که می‌بینید نیازی نیست تا در مورد حوزه‌ی دامنه‌ها نگران باشید؛ کافی است شما تابع مورد نظر خود را صدا بزنید. اگر قصد شما این است که از Cling به عنوان یک مترجم برای ساخت اسکریپت‌ها استفاده کنید، باید همه چیز را در داخل یک تابع قرار دهید.چرا که نقطه‌ی ورود به اسکریپت به طور پیش‌فرض همانند نام فایل می‌باشد. می‌توان آن را برای صدا زدن دیگر توابع سفارشی سازی کرد. بنابراین مثال قبل می‌توانید به شکل زیر تغییر کند: #include <stdio.h> void _01_hello_world() { printf("foo\n"); } یک نسخه‌ی دیگر در قالب سی‌پلاس‌پلاس #include <iostream> void _02_hello_world() { std::cout << "Hello world" << std::endl; } مثال‌ها کاملاً ساده هستند، اما آن‌ها به شما نشان می‌دهند که چگونه باید شروع کنید. در مورد کیوت چطور؟ #include <QtWidgets/qapplication.h> #include <QtWidgets/qpushbutton.h> void _03_basic_qt() { int argc = 0; QApplication app(argc, nullptr); QPushButton button("Hello world"); QObject::connect(&button, &QPushButton::pressed, &app, &QApplication::quit); button.show(); app.exec(); } اما توجه داشته باشید که کد قبلی کار نخواهد کرد، شما باید برخی از پارامتر‌های سفارشی را در Cling مشخص کنید. cling -I/usr/include/x86_64-linux-gnu/qt5 -fPIC -lQt5Widgets 03_basic_qt.cpp شما می‌توانید Cling را برای خودتان بر اساس آن چیزی که برای اسکریپت خود نیاز دارید سفارشی سازی کنید. همچنین شما می‌توانید Cling را به عنوان یک کتابخانه در اپلیکیشن‌های خود آورده و از سی‌پلاس‌پلاس به عنوان زبان برنامه‌نویسی استفاده کنید. این پُست در آینده ادامه خواهد داشت.
  14. بهنام صباغی

    کتابخانه VTK یک کتابخانه مجسم سازی سه بعدی اطلاعات و پردازش تصویر است. این شامل یک کتابخانه کلاس C++ و چندین لایه رابط تفسیری از جمله Tcl / Tk، Java و Python است. VTK یک کتابخانه کراس پلتفرم است که از سیستم‌عامل‌های لینوکس ، یونیکس ، مک و ویندوز پشتیبانی می‌کند. این ابزار پشتیبانی از پردازش موازی و ادغام با پایگاه های داده های مختلف در ابزارهای GUI مانند Qt و Tk را داراست. در سایت رسمی این کتابخانه به آدرس VTK - The Visualization Toolkit می‌توانید منابع آموزشی متعددی برای یادگیری این کتابخانه پیدا کنید. برای استفاده از این کتابخانه نیاز به کامپایل سورس این کتابخانه داریم . برای دریافت سورس میتوانید از صفحه دانلود سایت رسمی VTK استفاده کنید. بعد از دریافت این کتابخانه میتوانید با توجه به سیستم‌عامل خود از صفحه wiki سایت رسمی VTK برای تنظیم و کامپایل این کتابخانه استفاده کنید. دقت نمایید اگر نیاز دارید که از فریمورک Qt در برنامه خود استفاده کنید و صفحات گرافیکی VTK را در پنجره‌های Qt نمایش دهید باید به این مرحله پیکربندی با Cmake که مرتبط به کیوت 5 می‌باشد دقت کنید. بعد از کامپال و نصب کتابخانه میتوانید پروژه مثال استفاده از VTK و Qt در گیتهاب را اجرا کرده و صحیح بودن پیکربندی و ساخت کتابخانه را آزمایش کنید. برای یادگیری این کتابخانه میتوانید از کتاب یا ویدئو های موجود استفاده کنید ولی روش شخصی بنده برای یادگیری و استفاده از این کتابخانه در پروژه مشاهده و تحلیل مثال‌های کتابخانه VTK بود. این مثال ها جزء به جزء برای هر قابلیت پیاده سازی شده‌اند. در قسمت بعد روند کلی کارکرد این کتابخانه از روی سورس مثال معرفی شده از گیتهاب را برای شما عزیزان شرح می‌دهم.
  15. کامبیز اسدزاده

    همانطور که می‌دانید کتابخانه‌ی بوست یکی از بهترین کتابخانه‌های Non-STL برای سی‌پلاس‌پلاس می‌باشد. در این پُست قصد داریم در رابطه با ساخت و استفاده کتابخانه‌ی بوست توضیح دهیم. ابتدا کتابخانه را از اینجا دریافت کنید. فایل‌های دریافتی را در یک مسیر مشخص استخراج کنید. راه اندازی در پلتفرم ویندوز برای مثال در این آموزش ما فایل‌های مورد نظر خود را در مسیر C:/Boost استخراج کرده‌ایم. در کنسول به مسیر فوق رفته و دستور زیر را اجرا کنید. bootstrap.bat این دستور تحت ابزار مخصوص بوست فایل کانفیگ ساخت آن را ارزیابی و اجرا می‌کند. بنابراین دستور بعدی به صورت زیر خواهد بود: b2 toolset=msvc-14.0 --build-type=complete --abbreviate-paths architecture=x86 address-model=64 install -j4 گزینه‌ی toolset برای مشخص کردن کامپایلر و نسخه‌ی آن می‌باشد که در اینجا آن را msvc-14.0 قرار داده ایم. گزینه‌ی architecture جهت مشخص کردن معماری پردازنده است که به صورت پیش فرض بهتر است بر روی x86 تنظیم شود تا بر روی هر دو معماری ۶۴ و ۳۲ بیتی اجرا شود. گزینه‌ی address-model جهت مشخص سازی نوع پردازنده‌ای که پلتفرم اجرایی دارا می‌باشد را مشخص می‌سازد. برای مثال ما بر روی ویندوز ۶۴ بیتی و پردازنده ۶۴ بیتی گزینه x64 را انتخاب کرده ایم. گزینه‌ی -j برای مشخص کردن تعداد هسته‌های قابل استفاده در زمان کامپایل می‌باشد. که به صورت پیشفرض بر روی ۴ تنظیم شده است (۴ هسته قابل اجرا به صورت هم زمان). بعد از اجرای دستور فوق چیزی حدود ۳۰ دقیقه (کمتر و یا بیشتر) متناسب با قدرت پردازشی سیستم شما نیاز خواهد بود تا کتابخانه‌ی بوست کامپایل شود. توجه داشته باشید که بخشی از کتابخانه‌های موجود در بوست به صورت پیش فرض کامپایل نمی‌شوند و در صورت نیاز شما باید آن‌ها را به صورت سفارشی تحت دستور --with-libraryname مشخص نمایید. کد زیر را اجرا نموده و نتیجه را مشاهده کنید: #include <boost/scoped_ptr.hpp> #include <iostream> int main() { boost::scoped_ptr<int> p{new int{1}}; std::cout << *p << '\n'; p.reset(new int{2}); std::cout << *p.get() << '\n'; p.reset(); std::cout << std::boolalpha << static_cast<bool>(p) << '\n'; } این آموزش برای پیکربندی کتابخانه‌های chrono, thread, filesystem, regex و...بر روی پلتفرم‌های macOS و Linux ادامه خواهد داشت...
  16. درود از دوستان کسی وقت داره آموزش فارسی ساخت listmodel توسط C++ و ارسالش به qml رو بزاره ما هم استفاده کنیم. تو اغلب سایت های خارجی خیلی خلاصه وار بحث شده. اگر کسی تجربه ای داره ممنون میشم اینجا آموزششو بزاره. چون ظاهرا در پست قبلی من نتونستم با کلاس و توابع خود qml یه سرچ باکس برای listview بسازم و باید حتما با C++ لیست مدل رو ساخت و توسط ارسال به qml بشه سرچ کرد با سپاس
  17. خلاصه تعریفی از زبان برنامه نویسی سی پلاس پلاس (C++) این زبان دارای قابلیت‌های انواع داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان ترجمه شده با پشتیبانی از برنامه‌نویسی ساخت‌ یافته، برنامه‌نویسی شیءگرا، برنامه‌نویسی جنریک است. C++ به همراه جد خود C از پرطرفدارترین زبان‌های برنامه‌نویسی تجاری هستند بنا بر این در زیر فلسفه ای از این زبان را بیان می کنیم: زبان C++ طراحی شده‌است تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد. زبان C++ طراحی شده‌است تا مستقیماً و بصورت جامع از چندین شیوه برنامه‌نویسی (برنامه‌نویسی ساخت‌یافته، برنامه‌نویسی شی‌گرا، انتزاع داده، و برنامه‌نویسی جنریک) زبان C++ طراحی شده‌ است تا به برنامه‌نویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد. زبان C++ طراحی شده‌ است تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد. زبان C++ از بکاربردن ویژگی‌های خاص که مانع از عمومی شدن است خودداری می‌نماید. زبان C++ از ویژگی‌هایی که بکار برده نمی‌شوند استفاده نمی‌کند. زبان C++ طراحی شده‌است تا بدون یک محیط پیچیده عمل نماید. کتابخانه ها چه چیزی هستند و در این زبان چگونه است؟ به مجموعه‌های یکپارچه‌ای از کلاس‌های پیاده سازی شده (به صورت فایل‌های سرآیند با پیاده سازی‌های کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار می‌روند، یک کتابخانه C++ گفته می‌شود و قدرت اصلی این زبان در امکان به کارگیری کتابخانه‌های آماده می‌باشد برای مثال کتابخانه‌های بزرگ C++ مانند STL ، MFC ، Qt ، wxWidgets ، Boost و … مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کرده‌اند. لیستی از این کتابخانه های همراه با توضیحات در لینک زیر آمده است : A list of open source C++ libraries - cppreference.com لیست کامل انواع کامپایلر ها : List of compilers - Wikipedia ویژگی های جدید در ویرایش 11، 14 و ۱۷ چیست؟ زبان C++11 (معروف به C++0x) یک نسخه استاندارد از زبان C++ است که در ۱۲ آگوست ۲۰۱۱ منتشر و توسط ISO جایگزین C++03 شد این نسخه دارای نشان ISO/IEC 14882:2011 می باشد و در تاریخ ۱۸ آگوست ۲۰۱۴ نسخه جدید آن یعنی C++14 منتشر و جایگزین C++11 شد. امکانات اضافه شده به هسته C++ : یکی از وظایف کمیته استاندارد سازی توسعه هسته زبان است.در توسعه فعلی چندین بخش از زبان بهبود یافته ,که شامل چند نخی (multithreading) , پشتیبانی از بنامه نویسی عمومی ,مقدار دهی اولیه یکنواخت و پیشرفت عملکرد می باشد. ویژگی های هسته زبان و تغییرات آن به چهار بخش کلی دسته بندی شداند : 1. پیشرفت در عملکرد زمان اجرا (Run-Time) 2. پیشرفت در عملکرد زمان ساخت (Build-Time) 3. پیشرفت در ویژگی ها (قابلیت استفاده) 4. و قابلیت های جدید ویرایش C++‎‎‎‎‎‎‎‎‎‎‎ 14 بر روی اشکال زدایی و بهبودهای جزیی استاندارد قبلی یعنی C++‎‎‎‎‎‎‎‎‎‎‎11 تمرکز کرده است ؛ این زبان در تاریخ ۱۵ می ۲۰۱۳ منتشر و در ۱۵ آگوست ۲۰۱۴ بعد از رای گیری و انجام تغییراتی جزیی استاندارد این زبان منتشر شد. بدلیل این که عموماً تاریخ انتشار این زبان بطور قابل ملاحظه‌ای دیر هنگام بوده است به C++‎‎‎‎‎‎‎‎‎‎‎14 گاهی C++‎‎‎‎‎‎‎‎‎‎‎1y نیز گفته می‌شود. همانند استاندارد C++‎‎‎‎‎‎‎‎‎‎‎11 که به آن C++‎‎‎‎‎‎‎‎‎‎‎0x گفته می‌شده و قرار بر این بوده که قبل از ۲۰۱۰ منتشر شود (البته تا سال ۲۰۱۱ انتشار به تعویق افتاد). گرچه تمامی کامپایلر ها درحال کاربروی C++‎‎‎‎‎‎‎‎‎‎‎14 هستند اما هنوز تمامی آن ها ازC++‎‎‎‎‎‎‎‎‎‎‎ 14 پشتیبانی نمی‌کنند. در C++‎‎‎‎‎‎‎‎‎‎‎11 و C++‎‎‎‎‎‎‎‎‎‎‎14 توابع جدیدی به هسته اصلی زبان و کتابخانه استاندارد آن اضافه شده است که شامل بسیاری از کتابخانه های C++‎‎‎‎‎‎‎‎‎‎‎TR1 به استسنای کتابخانه ی توابع ریاضی ویژه میباشد. ویژگی‌های اضافه شده کتابخانه در ویرایش ۱۱ std::move std::forward std::to_string type traits smart pointers std::chrono tuples std::tie std::array unordered containers std::make_shared memory model ویژگی‌های اضافه شده به زبان در ویرایش ۱۱ move semantics variadic templates rvalue references initializer lists static assertions auto lambda expressions decltype template aliases nullptr strongly-typed enums attributes constexpr delegating constructors user-defined literals explicit virtual overrides final specifier default functions deleted functions range-based for loops special member functions for move semantics converting constructors explicit conversion functions inline-namespaces non-static data member initializers right angle brackets ویژگی‌های اضافه شده به کتابخانه در ویرایش ۱۴ user-defined literals for standard library types compile-time integer sequences std::make_unique ویژگی‌های اضافه شده به زبان در ویرایش ۱۴ binary literals generic lambda expressions lambda capture initializers return type deduction decltype(auto) relaxing constraints on constexpr functions variable templates ویژکی‌های اضافه شده به کتابخانه در ویرایش ۱۷ std::variant std::optional std::any std::string_view std::invoke std::apply splicing for maps and sets ویژگی‌های اضافه شده به زبان در ویرایش ۱۷ template argument deduction for class templates declaring non-type template parameters with auto folding expressions new rules for auto deduction from braced-init-list constexpr lambda lambda capture this by value inline variables nested namespaces structured bindings selection statements with initializer constexpr if utf-8 character literals direct-list-initialization of enums کتابخانه های استاندارد چیست و در نسخه ی جدید C++‎‎‎‎‎‎‎‎‎‎‎11 چگونه در دسترس هستند؟ در زبان برنامه نویسی C++ کتابخانه استاندارد سی++ مجموعه‌ای از کلاس‌ها و رویه‌ها است که در هسته زبان نوشته شده‌اند و قسمتی از استاندارد ISO سی++ می‌باشند. در سال ۱۹۹۸ استاندارد C++ شامل دو بخش هسته زبان و کتابخانه استاندارد C++ است. این کتابخانه شامل بیشتر بخش‌های STL و کتابخانه استاندارد C است. بیشتر کتابخانه‌های C++ در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانه‌ها را می‌توان در زبان‌هایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگی‌های کامپایلر مشخص خواهد شد که کدام زبان را می‌توان استفاده نمود. کتابخانه استاندارد C++ شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگه‌دارنده‌ها (مانند vector و list)، تکرارکننده‌ها (اشاره‌گرهای عمومی شده) برای شبیه‌سازی دسترسی مانند آرایه الگوریتم‌هایی برای جستجو و مرتب‌سازی در آنها وجود دارند. نقشه‌ها (نقشه‌های چندگانه) (آرایه شرکت‌پذیر) و مجموعه‌ها (مجموعه‌های چندگانه) واسط‌های عمومی فراهم می‌سازند. در نتیجه با استفاده از قالب تابع، الگوریتم‌های جنریک با هر نگه‌دارنده و دارای تکرارکننده عمل نماید. همانند C ویژگی‌های کتابخانه را می‌توان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. C دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شده‌اند. استفاده از کتابخانه استاندارد - مانند std::vector یا std::string به جای آرایه‌های C موجب ایجاد برنامه‌های مطمئن‌ تر شده‌ است. STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد C++ بوده‌است. استاندارد عبارت STL را بکار نمی‌برد بلکه آن را بخشی از کتابخانه می‌داند اما مردم هنوز هم آن را برای جداسازی بخش‌های مختلف کتابخانه با این نام بکار می‌برند. (جریان‌های ورودی/خروجی، جهانی‌سازی، تشخیص، زیرمجموعه کتابخانه C) بیشتر کامپایلرها کتابخانه استاندارد و STL را پیاده‌سازی می‌نماید. پیاده‌سازی‌های مستقلی نیز همانند STLport نیر وجود دارند. پروژه‌های دیگر نیز پیاده‌سازی‌های خود را از STL با توجه به اهداف خود بوجود می‌آورند. روش جدیدی جناب بیجارن در نظر گرفته که کتابخانه های استاندارد C++ علاوه بر اینکه توسط خود کامپایلر ها در دسترس و قابل استفاده هستش بلکه توسط کتابخانه STL و Boost نیز می توان دسترسی به مجموع عظیمی از کتابخانه ها استاندارد ISO داشت. ساختار فایل ها در این زبان چگونه است؟ در رابطه با ساختار برنامه های نوشته شده توسط C++ بدانید که منظور از ساختار در اینجا انواع فایل های موجود در زبان C++ است، در این رابطه باید اینگونه اشاره کنیم که در این زبان ما می توانیم از فایل های زیر برای برنامه نویسی استفاده کنیم. نکته قابل توجه: زمانی که زبان برنامه نویسی C++ در دوران اول خود قرار داشت بسیاری از سیستم ها قادر به پشتیبانی از انواع فایل سیستم ها نبودند، بنابراین بعدا ها پیشنهاد شد از فایل سیستم هایی با همان قابلیت همراه با ویژگی حمل پذیری در تمامی سیستم ها ایجاد شوند که در ادامه به انواع مختلف آن ها اشاره خواهیم کرد. فایل با پسوند .c این فایل منبعی برای کد هایی از نوع زبان C هستند. فایل با پسوند .c++ منبعی برای کد هایی از نوع زبان C و C++ هستند ضعف این نوع فایل در قابل حمل نبودن و عدم شناسایی توسط فایل سیستم ها می باشد. (منسوخ شده) فایل با پسوند .cxx منبعی برای کد هایی از نوع زبان C و C++‎‎‎‎‎‎‎‎‎‎‎ هستند با تفاوت اینکه نسبت به فایل .c++ قابل حمل تر است. (منسوخ شده) فایل با پسوند .cpp منبعی برای کد هایی از نوع زبان C و C++ هستند یعنی در هر دو نیز قابل استفاده می باشند. این پسوند با تمامی سیستم ها سازگاری دارد و بسیار رایج است. (پشنهاد شده) فایل با پسوند .hxx معمولا فایل با عنوان (هدر/سرصفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. (منسوخ شده) فایل با پسوند .hpp معمولا فایل با عنوان (هدر/سرصفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. این فرمت توسط مارس دیجیتال استفاده می شود. همچنین بورلند و دیگر کامپایلر های سی++ از آن پشتیبانی می‌کنند. ممکن است در این فایل متغیر ها، ثوابت و توایعی که در فایل سورس اصلی به آن ها اشاره شده است اعلام شود. فایل با پسوند .h معمولا فایل با عنوان (هدر / سر صفحه) یاد می‌شوند و معمولا فقط حاوی اعلان ها می‌باشند این نوع بسیار رایج است و تقریبا با تمامی سیستم ها سازگاری دارد. (پشنهاد شده) فایل با پسوند .hh در این زبان : فایل با عنوان (هدر / سر صفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. فایل با پسوند .h++ در این زبان : این نوع فایل ها معمولا فایل با عنوان (هدر/ سرصفحه) یاد می شوند و معمولاً فقط حاوی اعلان ها میباشند. ضعف این نوع فایل در قابل حمل نبودن و عدم شناسایی توسط فایل سیستم ها می‌باشد. (منسوخ شده) نکته : معمولا روش استفاده از این فایل ها به صورت جفت می باشد. برای مثال استفاده از فایل هدر .h++ همراه با سورس .c++ فراهم می شود. فایل .cxx همراه با .hh و فایل های .cpp و .hpp و در نهایت فایل .c و .h باهم دیگر مورد استفاده قرار می‌گیرند. اما در این میان استاندارد ترین و پر کاربرد ترین آن ها که از لحاظ قابل حمل بودن هم از طرف کمیته استاندارد سازی ISOCPP قابل تایید هستند فایل های .cpp و .c و یا .h و .hpp هستند که در بین این دو رایجترین آن ها .h و .cpp می‌باشند. یک فایل هدر با پسوند (.h, .hpp و ...) می‌تواند شامل محتوای زیر باشد: تعریف کلاس تعریف توابع درون خطی (Inline) اعلام تابع اعلام شیء مثال: #ifndef CPPFILES_H #define CPPFILES_H extern int status; class CPPFiles { public: CPPFiles(); void myFunction(); inline int safe(int i); }; #endif // CPPFILES_H یک فایل منبع - سورس با پسوند (.c, .hpp، .cxx و ...) می‌تواند شامل محتوای زیر باشد: تعریف کلاس تعریف توابع اعلام شیء مثال : #include "cppfiles.h" int status = 1; CPPFiles::CPPFiles() { } void CPPFiles::myFunction() { //Do somthing... } int CPPFiles::safe(/*@Param*/) { return /*Somthing...*/; } انواع فایل هایی که به آنها اشاره شد بسیار است ولی متناسب با محبویت و پشتیبانی کامپایلر ها از این فایل ها در این زبان برای انتخاب آنها مهم است بنا بر این در طی آموزش و تمامی مراحل ما فقط از فایل های .h برای هدر و فایل های .cpp برای منابع استفاده خواهیم کرد. چرا و چه زمانی باید از فایل های h. و چه زمانی از فایل های cpp. استفاده کنیم؟ در پاسخ باید اینگونه اشاره کنیم که در زبان C++ برای راحتی کار به خاطر پیچیده بودن کد نویسی امکان این وجود دارد که ما توابع ، کلاس ها و تعاریف رو در فایل جدا گانه ای مثل هدر فایل یا همان .h بنویسیم و برای اجرا عملیات و صدا زدن از فایل های .cpp استفاده کنیم البته این اجبار نیست ! شما می توانید در فایل .h و یا فایل .cpp به تنهایی برنامه رو اجرا کنید که معمولا در مثال های کوچک و کوتاه از یک نوع فایل استفاده می شود ولی بسته به نیاز و پیچیدپی در پروژه بهتر است استفاده از امکاناتی که این زبان در اختیار ما می گذارد به حد اکثر برسانیم. کاربرد این زبان در کجاست؟ معمولا تمامی برنامه ها و نرم افزار هایی که به صورت روزمره در زندگی مدرن امروزی مشاهده میکنیم بدون شک توسط زبان های مادر نوشته شده اند به عنوان مثال انواع صنعت در کشور ها از قبیل صنعت خودرو سازی، صنعت فضایی، سیستم های معماری و بانکی ، تجهیزات مدرت و سخت افزار های رباتیک در انواع صنایع ، سیستم های کامپیوتری و یا کنسول های بازی ، سیستم های خانگی و یا سیستم های رباتیک و هوش مصنوعی ، تجهیزات مجهز به انواع حسگر ها و هوش مصنوعی در علم پزشکی ، صنعت بازی سازی، نرم افزار های مهندسی و همچنین سیستم عامل ها و بسیاری از موارد دیگری که میتوان نام برد بدون شک توسط این زبان پیاده سازی شده اند. چگونه C++ می‌تواند در لایه های زیرین و بالا مورد استفاده قرار بگیرد؟ پاسخ این سوال بسیار واضح است، زیرا این زبان به عنوان سطح بالا اما با قابلیت مانور در سطوح پایین نیز مورد استفاده قرار بگیرد. به عنوان مثال حتی می‌توان توسط آن کد های اسمبلی نوشت و دستورات C که معمولا در لایه های زیرین به صورت سیستمی از آن ها میتوان استفاده کرد. آیا سیستم عامل ها و نرم افزار های مطرح دنیا توسط این زبان نوشته شده اند؟ دلیل آن چیست؟ همانگونه که مشخص است بسیاری از سیستم عامل ها از ابتدا توسط خانواده اسمبل ، C نوشته شده اند که به صورت زیر به تعدادی از آن ها اشاره می‌کنیم : DragonFlyBSD,FreeBSD,OpenBSD,NetBSD HP-UX Centos,Debian,Fedora,OpenSUSE,RedHat,Ubuntu OSX,iOS,Darwin OracleSolaris,OpenIndiana Cygwin Android Windows Phone BlackBerry WindowsXP,Vista,7,8,10 دلیل آن که از زبان هایی مانند C/C++ رای نوشتن سیستم عامل استفاده میشود قابلیت های مهم آن است به عنوان مثال : پرفرمنس بالا ، مستقل از سکو ، زبان مادر بودن و عدم وابستگی آن به زبان های دیگر، ارتباط با سخت افزار و تمامی دیوایس ها، مدیریت هوشمندانه و همچنین آزادانه برنامه نویسی کردن، دسترسی به لیست عظیمی از کتابخانه ها که می‌توان توسط آن ها هر چیزی را در این زمینه خلق کرد. انواع سخت افزار هایی که این زبان پشتیبانی می‌کند : مدل ماشین هایی که پشتیبانی می‌شود : PowerPC , Oracle,Fujitsu,Sun, IBM,Freescale , AMD,Intel مدل پردازنده ها : Athlon,Atom,Core,Core2,Corei3/i5/i7,Opteron,Pentium,Phenom,Sempron,Turion,etc Itanium,Itanium2,Itanium29000/9100/9300,etc PowerPC,POWER1/2/3/4/5/6/7,G1,G2,G3,G4,G5,etc UltraSPARCI/II/III/IV/T1/T2,SPARCT3/T4,etc با پشتیبانی از این نوع پردازنده ها قابلیت آن را به برنامه نویس میدهد تا بر روی وسعت بسیار زیادی از سیستم های مجهز به پردازنده ها برنامه نویسی کند این امر همان دلیلی است که انواع سیستم عامل ها بر روی سخت افزار های معرفی شده میتوانند اجرا شوند زیرا که برنامه نویسی با چنین زبانی قابلیت های ذکر شده را فراهم خواهد کرد. در صنعت بازی سازی و همچنین نرم افزار های مهندسی جهت طراحی و ساخت انواع بازی ها و یا طرح های بزرگ مهندسی و علمی از این زبان استفاده میشود که میتوان به وضوح برخی از آن ها را که توسط بزرگترین و مدرن ترین شرکت ها فراهم شده است نام برد... کنسول های بازی مانند PlayStation که همینک نسخه 4 آن در بازار موجود است دارای پردازنده ای بر پایه Power PC میباشد با سخت افزار بسیار قدرتمند توسط سیستم عاملی بی نقص بر پایه FreeBSD توسط C/C++ توسعه داده شده است. و در رابطه با دیگر کنسول هایی مانند Xbox One نیز همچنین میتوان ذکر کرد که این دو مورد مطرح ترین و داغترین بازار کنسول های بازی را در صنعت بازی همراه با پلتفرم PC دارند. بنابراین صنعت بازی سازی و هوش مصنوعی تماما بر پایه قدرتمندترین زبان توسعه می یابد چرا که استفاده از موتور های گرافیکی مانند Unreal Engine و یا سیستم های پردازشی 3 بعدی مانند OpenGL و Direct X توسط این زبان توسعه داده می‌شوند تا بازی سازان بستری را فراهم نمایند تا دنیای پیش روی بازی کننده را به واقعیت نزدیکتر نمایند. همچنین در رابطه با این صنعت میتوان به صنعت نرم افزار های مهندسی و سخت افزار های مناسب ذکر کرد مانند محصولات Autodesk که نرم افزار های قدرتمندی چون Autocad , 3dsmax و .. را برای صنعت مهندسی فراهم نموده اند و سخت افزار های قدرتمندی مانند محصولات NVIDIA و AMD ATI نیز کتابخانه های توسعه را برای زبان C/C++ منتشر کرده اند و حتی میتوان به Intel اشاره نمود که برای توسعه سیستم نرم افزاری در محصولات آن زبان C/C++ را پیشنهاد نموده و کتابخانه های لازم را فراهم کرده اند که حال در نظر بگیریم چنین سخت افزار ها در سازمان های بسیار کاربردی مانند NASA قابل استفاده است که حجم عظیمی از اطلاعات را پردازش میکنند. کاربرد این زبان در زمینه وب چگونه است ؟ در زمینه وب خود C++ به صورت مستقیم وارد طراحی صفحات وب نمی‌شود لذا که هدف از آن طراحی وب نیست البته لازم بذکر است کتابخانه های زیادی برای این کار موجود است ولی در لایه های کمی پایینتر استفاده از این زبان امریست طبیعی برای مثال وب سایت های بسیار بزرگی مانند Google , Facebook و غیره وجود دارد که هسته آن را توسط این زبان پیاده سازی نموده اند تا در لایه های بالاتر عملیات پردازش در حد پاس کردن به لایه زیرین و پردازش توسط C++ صورت بگیرد تا سرعت انتقال اطلاعات به صورت بسیار چشمگیری افزایش می یابد که میتوان به برخی از آن ها اشاره کرد که در نهایت منجر به مدیریت منابع و کاهش فشار سرور میشود. وب سایت Facebook را در نظر بگیرید چندی پیش بود که به دلیل افزایش کاربران و حجم اطلاعات آن فشاری که بر روی سرور های این شرکت آمده بود بسیار بالا بود و برای بهبودی آن نیازمند هزینه و افزایش تجهیزات سخت افزاری داشت که با نوشتن کامپایلری برای PHP توسط C++ توانست این مشکل را برطرف نماید و نیازی برای افزایش سخت افزار و هزینه های کلان برای به روز رسانی سرور ها نشد دلیل استفاده و بهینه سازی توسط C++ بود که نام آن HipHop میباشد. در رابطه با دیگر سیستم های وب سایت نیز میتوان اینگونه اشاره کرد که در لایه های زیرین استفاده های بسیاری از این زبان میشود به عنوان مثال کتابخانه های قدرتمندی از طرف Google با نام V8 ارائه داده شده است. سوال: من تاکنون در محیط کنسول با C++ برنامه نویسی کرده ام چگونه می‌توان برنامه های گرافیکی دارای رابط کاربری مدرن طراحی کرد ؟ روش استفاده و پیشنهادات چیست ؟ متاسفانه امروزه در کشور ما به دلیل عدم به روز بودن نظام آموزشی در رشته کامپیوتری و شاخه برنامه نویسی دانشجویان و برنامه نویسانی که فارغ التحصیل میشوند معمولا با زبان های C++ در حد محیط های Console و محیط توسعه TurboC و یا IDE معروف Visual Studio آشنا هستندکه متاسفانه باید به این نکته اشاره کنیم هیچ یک از نرم افزار های قدرتمند و سیتسم هایی که در موارد بالا ذکر شده در این محیط ها طراحی و توسعه داده نشده اند. این زبان آزادانه برنامه نویسی کردن را برای برنامه نویس فراهم میکند ولی متاسفانه شرکت هایی که توسط IDE های خود سیاست های محدود کننده خود را با نام کتابخانه برای C++ تزریق میکنند باعث گمراهی توسعه دهندگان و عدم شناخت صحیح از این زبان شده اند که در زیر به آن ها اشاره خواهیم کرد. اگر دقت کنیم در محیط های توسعه Visual Studio پروژه هایی که برای C++ در نظر گرفته شده است تحت کتابخانه های MS میباشد که تماما از API های مختص ویندوز در آن ها استفاده میشود و برنامه نویس هر چیزی را که خلق کند در انحصار مایکروسافت و سیستم عامل Windows منتشر کرده است! ولی هدف این زبان این نیست! هدف این است که به صورت ازادانه و بدون محدودیت باید برنامه نویسی کرد بنابراین مقدمات و همچنین کتابخانه های بسیار زیادی که به صورت استاندارد معرفی شده اند برای این زبان وجود دارد که می‌توانید در هر بستر سخت افزاری با هر نوع سیستم عاملی از آن استفاده کنید. حال چگونه باید طراحی رابط کاربری را انجام دهیم؟ برای طراحی رابط گرافیکی ابتدا باید ذهن خود را از محیط VS و همچنین کنسول کنار بکشید لذا برای این کار کتابخانه های مخصوصی در نظر گرفته شده است به صورت زیر : FLTK nana WxWidgets OWLNext GTK+ glibmm gtkmm goocanvasmm libglademm libgnomecanvasmm webkitgtk flowcanvas evince Qt libdbusmenu-qt توسط این کتابخانه های می توان محیط های کاربری را فراهم نمود که در این میان دو کتابخانه wXwidgets و Qt بسیار قدرتمند عمل کرده اند که بین این دو نیز Qt با قدرت بسیار زیادی از رقیب خود یعنی wXwdidget پیشی گرفته است و معمولا پروژه هایی که در آن رابط کاربری خلاقانه (Creative) و مدرن مطرح است حرف از Qt به میان خواهد آمد. در رابطه با آموزش برای کتابخانه wxWidgets به این لینک مراجعه نمایید | همچنین در رابطه با آموزش های مربوط به Qt به این لینک مراجعه نمایید. دانش کافی برای کار با این زبان چیست ؟ توجه داشته باشید این زبان بر خلاف زبان های دیگر لازمه دانش وسیعتری در رابطه با سخت افزار ، شبکه ، سیستم عامل و دیگر موارد را دارد لذا در این زبان برنامه نویس خود باید اطلاعات کافی در رابطه با اصول مهندسی و استاندارد نوسی را داشته باشد بنا براین اگر علاقه مندان و تازه کارانی که از رشته های غیر مرتبط با مهندسی کامپیوتر و مخصوصا نرم افزار وارد آن میشوند نباید انتظار حرفه ای شدن و اصولی برنامه نویسی کردن را داشته باشند مگر اینکه دوره هایی مخصوص در رابطه با این موارد را پشت سر بگذارند لذا تجربه ای حرفه ای در کار با این زبان یکی از اصول استاندارد نویسی و موفقیت در این زبان است. پیشنهادات ما استفاده از مقالات خارجی و منابع رسمی میباشد که رسمی ترین آن ها: http://en.cppreference.com/w/ و http://www.cplusplus.com خواهند بود. لینک ها و منابع بسیار زیادی هستند که اساتید و کاربران حرفه ای میتوانند به آن ها در این تاپیک اشاره نمایند. بازار کار این زبان در ایران چگونه است ؟ متاسفانه راحتی کار با زبان های دیگری که در ایران مطرح است به قدری این زبان را کم رنگ و غیر قابل استفاده نموده که هر برنامه نویسی که در زبان های غیر مرتبط با C++ فعالیت می‌کند چنین میپندارد که بازار کار این زبان مخصوصا در کشور ما مرده است ! و این زبان به طور کلی منسوخ گردیده است که در واقع چنین نیست این از نظر و دیدگاه برنامه نویسانی است که هیچ شناختی در رابطه با این زبان را ندارند ، بنابراین توصیه ما تحقیق این زبان برای پی بردن به ویژگی های آن خواهد بود. به طور کلی اگر برنامه‌نویس حرفه‌ای این زبان باشید همه جا برای شما کار موجود است ! پروژه های صنعتی تا پروژه های ریز و درشته کوچک... بانک ها، صنایع خودرو سازی، صنایع پزشکی، رباتیک، علمی و تحقیقاتی و مواردی که می‌توان مثال زد. معمولاً در ایران پیش به سوی تولید نرم افزار های حسابداری و چنین موارد میروند به صورت خودمانی مثالی میزنم اگر فکر می‌کنید کار با بانک اطلاعاتی سخت است و هیچ نررم افزار حسابداری یا مشابه با این زبان نوشته نمی‌شود دلیل آن بی حوصله بودن برنامه نویس و یا عدم شناخت برنامه نویس از وجود کتابخانه های مربوط به این زبان استب برای مثال بر اساس تجربه ذکر می‌کنم کار با دیتابیس تحت کتابخانه های MySQL و دیگر درایو های دیتابیس بسیار شیرین و آسان است دسترسی به منابع سخت افزاری و همچنین مدیریت و گزارش گیری و سازگاری برنامه های تولید شده تحت این زبان بسیار دل انگیز است. در نهایت در رابطه با ارزش و هزینه برنامه های تولید شده توسط این زبان را باید بگوییم ارزش آن بسیار بالاتر از برنامه های نوشته شده توسط زبان های دیگر خواهد بود لذا قابلیت هایی را که می‌توان فراهم کرد با ویژگی های خاصی که خواهد داشت قیمت نهایی پروژه را میتواند بر اساس سلیقه برنامه نویس یا توسعه دهنده افزایش دهد. اشاره ای بر انواع موتور های دیتابیس که توسط C++ پشتیبانی می‌شوند : SQL SQLite MySQL Sybase Adaptive Server SQL Server Oracle PostgreSQL IBASE : Borland IBM DB2 آیا با C++ می‌توان برنامه های موبایلی مانند Android , iOS و غیره را تولید کرد ؟ همانطور که می‌دانید امروزه صنعت توسعه نرم افزار در بازار کار تبلت و موبایل بسیار پیشرفت کرده و با سرعت بالایی رو به پیشرفت است بنا براین در این میان فناوری Cross Platform بودن نیز مطرح است. اگر نیاز است برنامه ای را تولید کنیم که در Android قابل اجرا باشد می‌بایست توسط زبان هایی مانند Java آن را توسعه دهیم و یا اگر نیاز است برای iOS برنامه ای را منتشر کنیم نیاز است با زبان Objective-C آشنا باشیم و همچنین محیط Xcode که مختص بستر های Apple است و شما بدون داشتن سیستم Apple تحت سیستم عامل مک نخواهید توانست این ایده را پیاده سازی نمایید، یا برای طراحی و ساخت برنامه های blackberry نیز باید با C++ آشنا باشید و در رابطه با دیگر موارد مانند Windows Phone همچنین است که یاد گیری تمامی این موارد برای خود زحماتی را خواهد داشت بنابراین برای خلاصی از این همه پیچ و خم تنها کافیست با C++ آشنا باشید که توسط کتابخانه های قدرتمندی مانند Qt می‌توانید برنامه خود را برای تمامی این پلتفرم ها منتشر نمایید که باید چنین ذکر کنیم که توسط C++ چیزی در دنیای برنامه نویسی غیر ممکن نیست. حال چگونه توسط C++ می‌توان همه این موارد را فراهم کرد؟ آیا قرار است برای هر کدام مجددا برنامه نویسی و طراحی شود؟ آیا قابلیت هایی که محیط های مخصوص آن دارند را توسط C++ می‌توان فراهم کرد ؟ پاسخ این سوال اینگونه خواهد بود ، زبان C++ یک زبان خود مختار و مادر است بنا براین چرا که نه ؟! به راحتی و با انتخاب کتابخانه مورد نظر خود می‌توانید اقدام به طراحی و تولید برنامه های Cross Platform کنید برای مثال شما می‌توانید با انتخای یکی از کتابخانه های طراحی مانند Qt اقدام به طراحی و کد نویسی نموده و کافی است با کامپایل برنامه نوشته شده در سیتم عامل های مربوطه آن ها را منتشر نمایید. هیچ نیازی نخواهد بود برای هر سیستم عامل مجددا کد نویسی و طراحی کنید لذا یک بار کد نویسی کافی است و زمان بسیار زیادی برای تمرکز بر روی مواردی همچون رفع باگ و توسعه برنامه شما در تمامی محیط ها به صورت یکباره خواهد بود. پیشنهاد ما در رابطه نحوه شروع برای یادگیری و آشنایی با زبان و انواع کتابخانه ها به صورت زیر است: قبل از هر چیز هدف خود را در رابطه با منابع مشخص نمایید، اگر زبان انگلیسی شما خوب است می‌توانید در همین قدم اول از منابع رسمی و استاندارد که بی نقص هستند استفاده کنید. سعی کنید اگر قرار است این زبان را یاد بگیرید عملا با آن درگیر شوید. از مقدمات برنامه نویسی شروع کنید و حتما در رابطه با تاریخچه زبان و اهداف آن تحقیق کنید. شرکت و سازمان های بزرگ و موفق را الگو قرار دهید. اگر هدف شما سریع رسیدن به پول بدون در نظر داشتن کیفیت و اهداف بزرگ از پروژه هستش به هیچ عنوان سراغ این زبان نروید زیرا C++‎‎‎‎‎‎‎‎‎‎‎ برنامه نویس حرفه ای را میطلبد نه برنام نویس راحت طلب. برای برنامه نویسی بهتر C++ نسخه های C++‎‎‎‎‎‎‎‎‎‎‎11 و 14 آن را بیاموزید. برای استفاده و کار با کتابخانه های این زبان بهتر است کتابخانه های داخلی مانند STL را بیاموزیم چرا که کتابخانه های پیشفرض آن مهم است. در رابطه با کتابخانه های عمومی Boost,Qt,STL مناسبترین گزینه میباشند. برای توسعه هرچه بیشتر پروژه و استفاده از انواع قابلیت ها توسط این زبان میبایست از کتابخانه های دیگر استفاده کنیم که در این میان در رابطه با بخش طراحی و رابط کاربریQt، GTK, MFC, SDL , wxWiddgets مناسب است که پیشنهاد ما در میان این لیست (Qt) خواهد بود که تحت آن میتوان مدرنترین طراحی ها را خلق نمود. برای کار با شبکه کتابخانه های Poco, Qt, RakNet, ReplicaNet, SDL موجود هستند و در بین اینها Poco بهترین گزینه میتواند باشد. برای کار با 3D بعدی کتابخانه مخصوص OpenGL یا باز همان Qt را که بر پایه موتور OpenGL است پیشنهاد میکنیم و یا می‌توانید از کتابخانه های مخصوص DirectX و OpenGL به صورت تخصصی استفاده کنید. در رابطه با 2D نیز از OpenGL، Direct2D, GDI و GDI+ میتوان استفاده کرد. در مورد Sound از کتابخانه های مطرح OpenAL, Fmod و Bass استفاده کنید. در مورد بحث فیزیک کتابخانه های Nvidia Physix, Nvidia Apex, Bullet, Box2D, ODE, Open Dynamics در رابطه با هوش مصنوعی کتابخانه های OpenAI, FEAR, OpenSteer, PathLib مطرح هستند. برای کار با پردازش تصویری OpenCV, OpenNI پیشنهاد میشود. برای کار با پردازش موازی OpenCL, OpenML, CUDA مناسب است. برای اسکریپت نویسی Lua, LuaPlus, Phyton برای کار با ورودی ها از OpenInput, Qt, SDL, SFML می‌توان استفاده کرد. برای بازی سازی کتابخانه های Unreal Engine, OGRE, Irrlicht, KGE مناسب هستند که در بین اینها Unreal Engine بسیار قدرتمند عمل می‌کند. برای طراحی و اجرای وب سایت کتابخانه های WebKit, ClearSilver, Teng مناسب هستند. لازم بذکر است این ها نمونه کتابخانه هایی هستند که برنامه نویس بر اساس سلیقه و ویژگی های موجود در کتابخانه می‌تواند انتخاب و از آن استفاده نماید و همچنین به این نکته اشاره کنیم معمولا کتالبخانه های عمومی برای اجرای پروژه های معمولی پاسخگو هستند برای مثال با انتخاب Qt می‌توانید یک نرم افزار خوب را با تمام قابلیت ها تولید کنید. و هزاران کتابخانه برای اهداف خاص که توسط اشخاص ، شرکت ها و سازمان های مختلف ارائه می‌شوند.
×