آموزش پایه ای C++ اشانتین flxpert.com برای کاربران سایت

++Hadi++

Active Member
بسم الله الرحمن الرحیم


سلام
شکر خدای بزرگ عالمان رو که به ما این توفیق بزرگ رو داد و ما هر چه داریم و دانیم از خدای بزرگمون داریم.
این آموزش به عنوان دست گرمی و هدیه خبرگان فلش کلا عمومی می شه ولی از فصل دوم به بعد انشاأالله خصوصی می شه...البته بعد از مدتی این تایپیک به انجمن درستش می ره.
بنده به دلیل اینکه هنوز برنامه ضبط تصویری دسکتاپ آماده نکردم فعلا به صورت متنی پیش می برم تا انشاأالله ببینیم چی می شه.سعی می کنم در آینده با توفیق الهی به صورت تصویری پیش ببرم.شاید بعدا این مقاله رو به صورت صوتی ضبط کنم تا دوستان به راحتی تو هر جایی مثل خیابون یا مترو گوش کنند تا نیاز به خوندن از روی مونیتور نداشته باشند.در ضمن می خوام اول با گفتن و داستان سرایی ، دید کلی که یوزر ها باهاش مانوسند رو بدم بعد برم سر کد نویسی .شاید داستان سرایی نصف کارمونو تشکیل بده و شاید تا نصف داستانمون به سبک داستانی تموم نشه،نصف کد نویسیشو شروع نکنیم چون قصد داریم به حول و قوه الهی کاربران رو از پایه در زمینه C++ قوی کنیم.و خیلیا با داستان سرایی راحتتر راه می افتند و آماده تر می شند و علاقه شون زیاد می شه.و بعد کد نویسی...
شروع ما از اینجا هست.
smile.png

تاریخچه زبان C و C++ به طور خلاصه:
زبان C در سال 1972 توسط دنیس ریچی طراحی شد.این زبان تکامل یافته زبان BCPL است که طرح آن از 'کن تامپسون' می یاشد.علت نامگذاری C این است که بعد از زبان B طراحی شد. زبان ++C از زبان C ناشی شده است.++C علاوه بر ویژگی های C ، ویژگی هایی دارد که در C موجود نیست.
زبان ++C توسط بی*یارنه استراس*تروپ دانمارکی در سال ۱۹۷۹ در آزمایشگاه*های بل (Bell Labs)، برای بهبود زبان سی و بر مبنای آن ساخته شد و آن را "C با کلاس" (C With Classes) نام*گذاری نمودند. در سال ۱۹۸۳ به ++c تغییر نام داد. توسعه با اضافه نمودن کلاس*ها و ویژگی*های دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه، قالب توابع، و پردازش استثنا انجام شد. این زبان برنامه*نویسی در سال ۱۹۹۸ تحت نام ISO/IEC 14882:1998 استاندارد شد. نسخه بعدی استاندارد این زبان ISO/IEC 14882:2003 است.
ویزگی ها:
C++ نسخه تکامل یافته زبان C هست و در دستورات C علامت ++ یک واحد به یک متغیر int یا عدد صحیح اضافه می کنه.به همین خاطر به این زبان،زبان C++ یا یکی بالاتر از C گفته می شه.
محبوبیت و قدرت این زبان در اینه که :
1- بسیار انعطافپذیره و همه نوع برنامه ای رو باهاش می نویسند.
2- برای هر سیستم عامل و دستگاهی تقریبا کامپایلر داره.
3- پرفرمنسش بسیار عالیه چون سطح میانی هست.
4- دستوراتش بسیار ساده هست و از نظر ریز بینی،امکانات لازم برای طراحی همه چیز رو به شما می ده.
5- قابل حمل هست یعنی اینکه می تونین تمام توابع اونو به صورت embeded یا توابع و فایل هایی که باید کنار برنامه تون حضور داشه باشند و یا توابعی که به صورت Frame Work باید نصب بشند،در برنامه قرار بدید تا در هر سیستمی به راحتی وارد کنید.
6- OOP رو ساپورت می کنه.
7- case Sensitive هست و باید همه حروف توش به درستی و با حروف بزرگ و کوچیک خودشون صدا زده بشه.


سطح زبانها:
3 سطح رو معمولا در بین زبانهای برنامه نویسی داریم:
1- سطح پایینی
2- سطح میانی
3 - سطح بالایی
الف - سطح پایینی به زبان ماشین ، یعنی 0 و 1 و زبان اسمبلی می گند ،این زبانها به سطح دستورات سخت افزاری یعنی صفر و یک نزدیکترند ، این زبانها یک مزیت بزرگ و یک عیب بزرگ دارند:
مزیت:دستورات درون اونها به قدری جزئی هست که می تونید به CPU و ثبات های اون و سایر منابع سیستم کامپیوتر دست پیدا کنید و خیلی دستورات پایه ای رو بنویسید و در واقع تمام کنترل سیستم کامپیوتر دستتون باشه،پس در واقع می تونید برای هر سیستمی و هر سخت افزاری برنامه بنویسید.طبیعتا شما اگر یک مهندس بینهایت حرفه ای باشید می تونید خیلی از عملیات اضافه و کارهای محاوره ای رو در این زبونها حذف کنید تا دقیق دقیق برنامه تون اون پردازش هایی رو انجام بده که بدون اونها کار برنامه کلا مختل می شه.پس پرفرمنس و اشغال رم برنامه بسیار ایده آل و عالی می شه.این سیستم ها می تونه راه نفوذ بینهایتی به هکر ها بده.
عیب : بسیار سخت و طاقت فرسا هست و روند رشد برنامه ها درون اونها کند هست.برای اینکه یه برنامه ساده در حد چاپ یه متن بنویسید باید کلی کد بنویسید و زمان صرف کنید و خیلی اشتباه کنید و تصحیح کنید تا برنامه ساده خودتونو تموم کنید.

ب- سطح بالایی : این زبونها توسط شرکت هایی مثل مایکروسافت ،گسترش پیدا کرده و راحت شده اند .در واقع مایکروسافت با زبونهایی مثل C و C++ ،کلی تابع نوشته و کلی گسترش داده تا این زبونها بوجود بیاند.سیستم .net و C# و یا VB یکی از بهترین نمونه های این نوع زبونها هست.شما با نوشتن یک خط دستور،n خط دستور زبان سطح میانی و M خط دستور زبون سطح پایین مثل اسمبلی یا زبان ماشین 0 و 1 رو اجرا می کنید،البته بدونید که در این مثال ما m تقریبا می تونه دو یا سه برابر n باشه.در واقع با مشخصه ها و مولفه هایی مثل OOP، کلی تابع و کلاس نوشته می شه تا کار یوزر های برنامه نویس یا بهتر بگم گسترش دهنده، راحت بشه تا با نوشتن تعداد کد های کمتر ،کلی کارها رو انجام بدند.
مزایا:کد راحت و به زبان انگلیش نزدیک تر،سرعت بالای گسترش نرم افزاری،امکانات بیشتر برای کار های حرفه ای تر و درصد خطای کمتر به جهت اینکه شرکتی مثل مایکروسافت،با کلی مهندسین فوق حرفه ای،سالها زمان می گذارند و با حوصله زیاد، توابع لازم برای نرم افزار های گوناگون رو توسعه می دند تا با باگ و خطاهای کمتر،توابعی رو بیرون بدند تا شما با صدا زدن یک خط دستور،یک فرایند پیچیده ای رو بدون باگ و سریع انجام بدین.
معایب :کلی بینی به این معنی که شاید نتونید خیلی از نیاز های سیستمی و برنامه های ریز بین سیستمی رو بنویسید.چرا که برای کارهای روتین تر گسترش پیدا کرده اند و در زبونهایی مثل اسمبلی که سطح پایین هست شما می تونید به ریز به ریز محاسبات و پردازش های CPU نفوذ و دخالت کنید و جریان رو دقیقا همونجوری که دوست دارید پیش ببرید و حتی بتونید یک مکانیسم جدید جمع با پرفرمنس عالی بوجود بیارید و مثلا برای پارتیشن بندی یا recovery یا خیلی کارهای دیگه ،با زبونهای سطح بالا عملا خیلی نمی تونید مانور بدید.شاید در یه سری مسایل یه سری محاسبات اضافی توسط زبانهای سطح بالا انجام بشه چرا که طراحان اونها،اونها رو با یه دید کلی تر طراحی کرده اند و شاید تمام کار ها و مراحلی که اونها طی می کنند تا کاری انجام شه ، تماما همه جا نیاز نباشه.

ج-زبانهای سطح میانی :C++ جزو این دسته هست.این دسته هم از مزایای سطح پایینی و هم از مزایای سطح بالایی بهره می برند.چرا؟
از نظر قدرت و نداشتن محدودیت و ریز بینی و تیز بینی و عدم انجام محاسبات اضافی شبیه به زبونهای سطح پایین هست و از نظر ساده تر بودن و راحت تر بودن و گسترش سریع تر برنامه ها و غنی بودن تابعی برای کارهای حرفه ای تر شبیه به زبانهای سطح بالایی هست.البته نه کامل بلکه نسبی. و در عین حالی که نیمی از مزایای هر دو حالت رو داره،نیمی از معایب هر دو رو داره یعنی اینکه سرعت و سهولت گسترش نرم افزاری و راحتی کاربرا و user friendly و حذف عملیات پایه ای تر تو اون کمتر از زبانهای سطح بالایی هست و عدم داشتن محدودیت و قدرت محض بودنش تو زمینه های پایه ای سخت افزاری در اون کمتر از زبانهای سطح پایه ای و پایین هست.C++ در واقع زبون خام هست.تا از اون ابزار بوجود بیارید.و از اونها برای کارهای بینهایت حرفه ای با پرفرمنس عالی و مصرف رم کمتر و مدیریت بالا (پردازش،رم و IO ) برخوردار بشید.
بیشترین قدرت و سرعت اجرا و پرفرمنس و ایده آل ترین مقدار اشغال رم وعدم محدودیت رو در زبانهای سطح پایین داریم که هر چه بالاتر بریم ،این حالت کمتر و کمتر می شه تا اینکه در زبانهای سطح بالایی،این مقدار به نصف و حتی کمتر از نصف تقلیل پیدا می کنه.در عوض در زبونهای سطح بالایی ، بیشترین سرعت گسترش نرم افزاری و سهولت کد زنی و طراحی و غنی بودن توابع آماده رو داریم که هر چی پایین و به سمت سیستمی تر شدن و سطح پایین تر شدن پیش بریم،این حالت کم تر و کم تر می شه .پس دو جریان معکوس در خلاف جهت هم.
برنامه ها اول توسط کد نویس نوشته می شند و برنامه هایی به نام کامپایلر اونا رو کامپایل می کنه و به زبان اسمبلی تبدیل می شند و یه برنامه به نام اسمبلر ،کد های اسمبلی رو به زبان ماشین تبدیل می کنه و بعد،به راحتی برای سیستم کامپیوتری قابل درک می شه.سپس سیستم کامپیوتری اونها رو اجرا می کنه.
لزوم OOP:
برنامه ها در ابتدا به زبان ماشین بودند یعنی یک مشت صفر و یک.برنامه نویسان اولیه در گیر یک مشت صفر و یک می شدند تا یه برنامه ساده در حد جمع و تفریق اعداد و چاپ و IO رو انجام بدند.پس گسترش نرم افزاری بسیار کند و سخت و طاقت فرسا بود.دیدند که می تونند تمامی اعمال کامپیوتری رو دسته بندی کنند تا با اجرای یک گروه دستور خاص،کاری رو انجام بدند تا دیگه کد نویس این وظیفه های جزئی بین رو به خود سیستم کامپیوتر محول کنه.پس لزوم بوجود اومدن کامپایلر در اینجا حس می شد تا اینکه اسمبلی بوجود اومد.در زبان اسمبلی یک سری کد ها و دستوراتی رو به صورت انگلیش می نوشتند و سیستم اسمبلر که حکم کامپایلر رو برا اسمبلی بازی می کرد،با رجیستر های CPU بازی می کرد تا اون دستورات رو برای CPU قابل درک کنه.برنامه نویسان خیلی احساس راحتی می کردند.ولی همچنانی که برنامه ها رو با سرعت بهتر و بالاتر و برنامه های بزرگتری رو می نوشتند،احساس می کردند که باز هم باید زبونهای برنامه نویسی گسترش پیدا کنند و کار رو راحت تر کنند مخصوصا که یک برنامه نویس در اون زمان باید حکم یه CPU رو بازی می کرد تا پردازش ها رو کنترل کنه.پس زبونهای ساخت یافته مثل C بوجود اومدند و کار رو بسیار راحت تر و محاوره ای تر می کردند اما در این زبونها،دستورات از پایه و اساس نوشته می شدند و اگه مکانیسمی قرار بود در n جا تکرار بشه،باید n بار نوشته می شد.البته خوب تو خود زبان C حالت تابعی بوجود آمده بود تا با نوشتن یک بار تابع، n بار اونو صدا بزنند ولی در کل کار باز هم سخت بود.اما در دهه 80 میلادی،ایده OOP از روی ساختمان سلول ها مطرح شد،چرا که سلول ها همگی از یه الگوی خاص طبعیت می کنند منتها در مشخصات خاص،همگی در انجام یک سری رفتار های خاص مشابه همند چرا که رفتار هایشان از ژنها و مشخصاتشان نشات می گرفت.و بین اونها ارتباطاتی بوجود می آمد و اونها مشخصاتشونو از پدرانشون و پدران از پدر بزرگهایشون به ارث می بردند.پس ایده Object Oriented یا OOP یا شی گرایی مطرح شد و دنیای برنامه نویسی وارد عصر جدید و دوران شکوفایی شد.برنامه نویسان قبلا ادیتور های مناسب امروزی رو نداشتند.حتی امکان کپی پیست نداشتند،باید برنامه ها رو رو کاغذ یادداشت می کردند تا در جاهای دیگر که لازم داشتند اونا رو دوباره بنویسند.کم کم ایده تابع و متد مطرح شد تا با ورود یک سری پارامتر از انواع گوناگون داخل یک ساختار،بتونند یک سری محاسباتی رو روی این داده ها و یا بوسیله این داده ها انجام بدند و در نهایت یا یک خروجی واحد از نوعی واحد ، بیرون بدند و یا اینکه خروجی ها به وسیله اعمال و رفتار هایی باشند که در بدنه توابع void گسیل می شند. با صدا زدن یک تابع،یک دستور پیچیده رو می تونستند n بار برای n داده متمایز اجرا کنند.اما باز اگر می خواستند در حوزه دیگری همین کار رو انجام بدند که اون زبان اجازه نمی داد مجبور بودند کد های تابع رو باز نویسی و در عصر هایی که ادیتور ها قابلیت کپی پیست داشتند،کپی پیست کنند،اما این روش جالب نبود چرا که خود عمل کپی پیست و شاید در برخی جاها عملیات یه کم متفاوت ، باعث خرابی و به هم خوردن و تولید خطا در برنامه می شد.پس ایده اولیه OOP شکل گرفت و کد نویسها برای هر ساختار تابعی،فایلی رو در نظر گرفتند تا تابع رو در اون بنویسند و هر جا خواستند،اونو import و استفاده کنند،بدون اینکه نیاز به بازنویسی یا کپی کردن تابع مد نظر باشه.
با بهتر شدن روند کد نویسی و سرعت بالاتر توسعه نرم افزاری ،نیازهای دیگه ای هم مطرح شد.اینکه کد های تابع که در یک برنامه برای عملیات خاصی مثل طراحی یک تکست باکس طراحی شده بود،باید در پروژه دیگری استفاده می شد.خوب به راحتی با فایل تابعی این نیاز مرتفع می شد.یا اگر در کلیت یک تابع و مکانیسم ایرادی در شرایطی خاص بوجود می آمد،باید اونو رفع باگ می کردند،این شرایط در حالتی که قبلا کد ها بازنویسی و کپی پیست می شد بسیار سخت بود چون باید در هر حوزه ،تابع مربوط به اونو رفع باگ می کردند،ولی در شرایطی که فایل تابعی در همه جا import می شد، دیگه از یه جا ،مکانیسم مد نظر رفع باگ می شد و در همه جای برنامه ،اصلاح می شد. خوب برنامه نویس ها دیدند که می تونند در یک رده عملیات ، توابع حرفه ای تر بنویسند تا یک بازه نیاز های مختلف اون رده رو با دادن مقادیری خاص یا با انجام محاسبات روی داده های ورودی و تشخیص اتومات مسایل توسط تابع مد نظر حل کنند.تا اینکه نیازهای بزرگتری بوجود اومد که باید در یک فایل شبیه به این فایل های تابعی،باید یک سری متغیر یا مشخصه یا variable یا property تعریف می شد.
همچنین یک سری تابع یا function یا method تعریف می شد .در عین حال اون property ها می تونستند از نوع ثابت یا const باشند تا در حین اجرای برنامه ، مقدارشون عوض نشه. پس در این جریانات پیچیده، می تونست n متد مختلف با آرایش مختلف و وظایف جز به جز مختلف وجود داشته باشند و m متغیر مختلف برا ذخیره مقادیر لازم مختلف.کل فایل می تونست حکم یه پادگان رو بازی کنه که وظایف یا method هایی ، توش تعریف شده و property ها هر کدوم حکم سرباز،افسر،سرگرد،سرهنگ و تیمسار رو بازی کنن تا هر کدوم در این وظایف یا method ها چیزی رو ذخیره کنند و با خود حمل کنند تا وظایف مختلف رو یکی یا چنتا از این متغیر ها ایفا کنند .این پادگان وظیفه اش می تونه نگهداری یک سری سلاح در یه ذاقه مهمات یا نگهبانی از یه منطقه عملیاتی یا انجام جنگ یا یه پادگان بیمارستانی باشه.خوب این فایل های کلاسی وظایفی مثل مدیریت و تهیه یه تکست باکس یا یه سرچ انجین یا اسکرول متن و ... رو بازی می کردند.دید OOP به برنامه نویسان این قدرت رو داده بود تا الگویی رو که شامل یک سری property و یک سری method می شد رو بوجود بیارند و از روی اون n نمونه بسازند و به هر کدوم ،مقدار خاصی property بدند تا با هم متمایز شند و به نسبت property هاشون،توابع یا بهتر بگم متد هاشون ، رفتار های خاصی رو نشون بده.اما اگر مثلا کلاس آدم رو با تمام پیچیدگی ها و property ها و method هاش بوجود می آوردند،آیا باید برا ساختن یه شبه انسان پلاستیکی که نه چشم داره نه گوش نه عقل و نه شعور،یک بار کل اینها رو بوجود می آوردند و همه اونها رو کر و کور می کردند؟آیا باید یه نمونه کامل از اونو می ساختند و همه رو کچل و کر و کور و لال و چلاق می کردند تا شبیه اون عروسک آدمی پلاستیکی (مانکن) شه.طبیعتا برنامه ای که به قصد کلی بوجود می اومد دیگه بهینه نبود چون فضای زیادی از رم و CPU رو اشغال می کرد در شرایطی که شاید مثلا کاربر از برنامه یه ماشین حساب می خواست ،نه کامپیوتری که همه جاشو کور کنه تا فقط ازش یه ماشین حساب در بیاره.پس در اینجا بود که ....

پایان مبحث اول...
 

جدیدترین ارسال ها

بالا