رفتن به مطلب

نکات مهم در ++c


Mita

ارسال های توصیه شده

به نظر میرسه دانستن یه سری نکات برای کسی که میخواد تازه با c++ کار کنه، ضروریه

البته من میخوام نکات رو به زبان خیلی ساده بگم (تا جایی که ممکنه!)

مثلاٌ اینکه اصلاٌ چرا میخواد با c++ کار کنه؟! یا فرق های این زبان با زبانی مثل c چیه؟

همه ما میدونیم c++ زبان شی گرا یا به اصطلاح object-oriented هست.

خب این یه فرق اساسی با زبان c بود ولی چرا نیاز بود که یک زبان برنامه نویسی شی گرا بشه ؟ یا شی گرایی چیه؟

زبان c++ شی گراست یعنی در اون اگه میخوایم مثلاٌ درباره یه دستگیره در (!) کد بنویسیم، کاربر استفاده کننده از برنامه ما نباید از مکانیسم داخلی این دستگیره چیزی بفهمه ؛

اینکه به طور مثال یه میله داخل یه حلقه باید بچرخه یا چیزای دیگه و طبیعتاٌ وقتی که اندازه این میله هم تغییر کنه و کوچیک و بزرگ شه هم کاربر از وجود اون مطلع نمیشه.

پس با این کار ما به طریقی داریم دسترسی کاربر رو به برنامه کمتر می کنیم. در مورد کد هایی که میخوان فروخته بشن خب این یه اصله.یعنی در کدهای خیلی مهم پیاده سازی (implement) باید از اطلاعات اصلی کد جدا بشه.

لینک به دیدگاه

شی گرایی با کلاس بندی هر موضوع به پیاده سازی راحتتر کد هم کمک میکنه. اگه میخوایید در مورد یه بازی کد بنویسین که اعضای اصلی (!) اون تخته و مهره است، باید چند تا کلاس مثل کلاس تخته، مهره (که در این کلاس میتونیم مهره هایی با رنگ های مختلف داشته باشیم)، نحوه کار بازی و ... داشته باشید.

چرا؟

چون اینجوری اگه یه تغییر در کدتون ایجاد بشه و مثلاٌ بخواین به بازی یه مهره زرد رو هم اضافه کنین دیگه لازم نیست رو کل کد دست ببرین و فقط کافیه به کلاس مربوطه (در اینجا مهره) رنگ زرد رو هم اضافه کنین. این یکی از مزیتهای اصلی شی گرایی بود و c این امکان رو نداشت.graduated.gif

لینک به دیدگاه

یکی دیگه از نکاتی که رعایتش خیلی خیلی در زبان های برنامه نویسی مهمه شناختن کلمات کلیدی در زبانهای برنامه نویسیه.

من لیست کلمات کلیدی زبان c++ که مشترک با زبان c هست رو اینجا میذارم.

 

i400912_keys.jpg

لینک به دیدگاه

همون طور که گفتم کلمات کلیدی در زبان های برنامه نویسی خیلی مهمند

چرا؟

چون حتی برنامه نویس های حرفه ای هم ممکنه روزی یکی از این کلمات رو فراموش کنن! مثل خود کلمه key.

و نتیجه چیه؟

اینکه ممکنه به اشتباه اونها رو به عنوان نام متغیرهاتون بذارید و بقیه کار به شانس شما بستگی داره چون ممکنه برنامتون حتی به کامپایل هم نرسه....

اما خب اگه خوش شانس باشید شاید با اجرای برنامه کد به یکی از کدهای ذخیره شده در کامپایلرتون هدایت بشه و شما متوجه بشید که یه جای کار اشکال داشته

در هر صورت ممکنه الان به این فکر افتاده باشیم که:

چطوری میشه این همه کلمه رو از کتابخونه عظیم++ c حفظ کرد؟

باید گفت بعداٌ در برنامه ها شما قادرید در ابتدای کد کلمات کلیدی که در اون کد استفاده کردید رو مشخص کنید ، اینجوری دیگه کد از همه کتابخونه استفاده نخواهد کرد.

لینک به دیدگاه

اساس کار در محیط ++c

1)ویرایش کد

2)پیش پردازش

3)کامپایل

4)ارتباط

5)بار گذاری

6)اجرا

البته شاید زیاد مهم به نظر نرسه که ++c دقیقاٌ چی کار میکنه !

اما خب برای یه برنامه نویس حرفه ای این مهمه
graduated.gif

شکل پایینو نگاه کنین خیلی خوب توضیح داده

البته من ترجمه فارسی این قسمت رو هم میذارم

 

 

i401242_c.jpg

 

 

در قسمت اول برنامه نوشته و بر روی دیسک ذخیره میشه

در قسمت دوم پیش پردازنده کد رو پردازش میکنه

در قسمت سوم کامپایلر شی کد رو میسازه و بر روی دیسک ذخیره میکنه

در قسمت چهار پیوند دهنده شی کد رو با کتابخونه ها ارتباط میده و فایل خروجی رو تولید میکنه

در قسمت پنج لودر یا بارکننده برنامه رو در حافظه قرار میده

و در قسمت شش cpu خط به خط دستور رو میگیره و اجرا میکنه

و ممکنه داده های جدیدی همون طور که کد خط به خط اجرا میشه ذخیره کنه(داده هایی، حاصل از عملیات بر روی داده های قبلی )

لینک به دیدگاه

سیستم IO چیست؟

برنامه نویسا اصطلاحاٌ به سیستم ورودی و خروجی IO میگویند

IO ابتدای کلمات Input و Output است.

که شامل کلمه کلیدی cin

که جریان ورودی استاندارد است و از طریق کیبورد وارد میشود.

cout جریان استاندارد خروجی است.

و در صفحه نمایش این جریان را داریم

 

cerr جریان استاندارد ارورهاست.

لینک به دیدگاه

نکته مهم در مورد فایل های سرآمد (header files) در زبان ++C اینه که فقط دونوع پسوند داریم

یکی cpp و دیگری .h

اما در پیش نویس های جدیدتر ++C پسوند .h کاربردی نداره.

خط using namespace std; در کدها نشون میده برنامه نویس داره از کتابخونه استاندارد ++C استفاده میکنه.

ولی باید یادمون باشه برای اعلان کتابخونه ای که خودمون ساختیم دیگه نمیتونیم از اسم std استفاده کنیم و مثلاٌ میتونیم اسم necessary رو به اون بدیم.

توصیه میشه در کدها یه کتابخونه برای خودتون بسازید تا مجبور نباشید از کل کلمات کلیدی با خبر باشید!

راستی اگه کد به صورت std::cout نوشته بشه دیگه لازم نیس از دستور بالا استفاده کنین یعنی از دستور using.

لینک به دیدگاه

تابع Inline:

تابع Inline در زبان c هم وجود داشت. اما کار اون چیه؟

شاید در مقاله ها زیاد دیده باشید که اگه از یک عبارت زیاد استفاده بشه نام مختصری به اون میدیم و در نتیجه از اون به بعد به جای عبارت طولانی این نام رو میاریم.

خب، طرز کار Inline هم همین طوره. کلاٌ Inline یعنی توصیه کردن . پس ما داریم به صورتی به کامپایلر توصیه کاهش کد رو میدیم .

 

این روش مثل فراخوانی یک تابعه، اما سریعتر از اونه

ولی عیب هایی هم داره که بعداٌ راجبش بیشتر میگم.

class Fred {

public:

void f(int i, char c);

};

حالا با استفاده از inline کد به این صورت درمیاد:

inline

void Fred::f(int i, char c)

{

...

}

درست مثل یه تعریف

لینک به دیدگاه

++C مثل C زبانی حساس به حروفه یعنی همون Case Sensitive

 

return 0; نشان میدهد برنامه با موفقیت ایجاد شده

 

در مورد عملگر تقسیم یا / : در اون گرد کردن اتفاق نمی افته پس حاصل 7 تقسیم بر 4 1 خواهد بود.

% باقی مانده تقسیم دو عدد رو بر هم نشون میده

 

ترتیب ارزیابی عملگرها:

پرانتز-باقی مانده تقسیم دو عدد بر هم-ضرب و تقسیم-جمع و تفریق

در ضمن ترتیب ارزیابی از چپ به راسته ولی مثلاٌ اگه در یه عبارت دوتا پرانتز داشته باشیم پرانتز سمت راستی زودتر از پرانتز سمت چپ زودتر اجرا میشه

 

و نکته آخر این پست:

در مورد شرطها است و عملگر == که در شرطها و برای ارزیابی دو عبارت به کار میره اینکه عبارت اول مساوی عبارت دوم هست یا نه؟

پس اون رو با عملگر = اشتباه نکنیمa062.gif

لینک به دیدگاه

راستی محیط برنامه نویسی ++C رو اینجا براتون میذارم برای اینکه مشکلی نداشته باشید و وقتتونم گرفته نشه !

devcpp-4.9.9.2_setup

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه

یه چند تا نکته که به نظرم میرسه خوبه در کدها رعایت بشه:

استفاده از عملگرهای انتسابه، مثلاٌ به جای نوشتن C=C+3 میتونیم از عملگر =+استفاده کنیم

و کد به این صورت درمیاد:

C+=3

راستی توضیحه تفاوت a++ و ++a رو هم همین جا میگم

وقتی عملگر ++ قبل از متغیر میاد یک واحد به متغیر اضافه میشه و بعد اگه تغییراتی داشته باشیم صورت میگیره

اما اگه بعد از اون بیاد اول عملیات اجرا میشه و بعد مقدار یه واحد اضافه میشه

لینک به دیدگاه
  • 1 ماه بعد...

توابع:

اول باید بگم همه متغیرهایی رو که درون تابع تعریف میکنیم، محلی اند.

كد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

یه مثال میزنم تابع میانگین یا average رو در نظر بگیریم :

كد:

int average ( int a , int b )

return (a+b) / 2;

}

تابع بالا میانگین دو عدد رو حساب میکنه و همون که می بینید، دو عدد رو از کاربر میگیره که در واقع همون آرگومانهای فرستاده شده است(function prototype). و آرگومانی رو هم که برمیگردونه از نوع صحیحه، چرا؟

به خاطر int قبل از نام تابع.

لینک به دیدگاه

نمونه اولیه و امضا یه تابع چیه؟

 

اول این مثال رو ببینید:

كد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

این یه نمونه اولیه تابعه.

مزیت هاش اینه که به وسیله اون میتونیم نام تابع، نوع داده ای که برمیگردونه، تعداد پارامترهایی که تابع انتظار دریافت اونا رو داره و نوع و ترتیبشون رو بفهمیم.

در ضمن همین جا اینم به یاد داشته باشین که

امضا یه تابع نامش هست + نوع آرگومان هاش

لینک به دیدگاه

 

روشهای فراخوانی تابع:

1)فراخوانی با مقدار

2)فراخوانی با ارجاع

 

این دو روش فرقهایی با هم دارن، مثلاٌ
در روش فراخوانی
با مقدار
یه
کپی از داده
گرفته میشه و بعد از اون با همین کپی کار میشه و
مقدار خود متغیرها بعد از فراخوانی تغییر نمیکنه.

از این جهت این فراخوانی خوبه اما چون داریم یه کپی از داده میگیرم خب مسلماٌ
زمان زیادی مصرف میشه

در روش دوم یا
فراخوانی با ارجاع
دیگه از داده کپی گرفته نمیشه و با خود متغیرها کار میکنیم،
این روش سریعتره
اما
مقدار متغیرها رو تغییر میده

لینک به دیدگاه

 

قالب فراخوانی با ارجاع به این صورت نشون داده میشه:

int &counter

یا

int& counter

و معنیش هم اینه:

counter یه ارجاع به int است.

یادتون باشه
کلاٌ فراخوانی با مقدار و فراخوانی با ارجاع مثل هم نوشته میشن، یعنی از نظر تابع یه قالب دارند
.

خب، پس از کجا بفهمیم کدوم فراخوانی مد نظر بوده؟

از نوع آرگومانی که گرفته و در واقع نمونه اولیه تابع میشه اینو فهمید
.

همون طور که گفتم قبل از متغیر فراخوانی شده توسط ارجاع یه & میاد

یه نکته مهم دیگه هم اینه که
در داده های بزرگ همیشه از فراخوانی توسط ارجاع استفاده کنین
که دیگه زمان برای کپی شدن حجم زیاد داده مصرف نشه

لینک به دیدگاه

عملگر یگانی تفکیک حوزه ( :: )

 

به کمک این عملگر میتونیم متغیرای سراسری و محلی با نامهای یکسانی داشته باشیم.

و بنابراین در حوزه متغیر محلی میشه به متغیر سراسری هم دسترسی داشت.

البته عکس این مطلب درست نیست،

یعنی نمیشه در حوزه متغیر سراسری به متغیر محلی دسترسی پیدا کنیم .

لینک به دیدگاه

گرانبار کردن توابع چیه؟ و چه فایده ای داره؟

در ++c میتونیم چند تا تابع با نامهای یکسانی داشته باشیم که البته پارامترهای اونا متفاوت باشه، به این میگیم گرانبار کردن توابع !

 

البته کامپایلر براساس آرگومانی که که در فراخوانی تابع اومده تابع درست رو انتخاب میکنه.

خب..فایده واضحی که گرانبار کردن داره کوتاه کردن کده، و اینکه دیگه لازم نیس نامهای مختلفی واسه کد و تابع ها نوشته بشه و باعث سردرگمی خود برنامه نویس باشه.

لینک به دیدگاه
  • 8 ماه بعد...

همونطور که میدونید یکی از کامپایلرهای خوب برای زبان C++ و خیلی از زبان های دیگه، کامپوننت های مختلف

از نرم افزار Microsoft Visual Studio هست.

 

اما خب این کامپایلر شاید تفاوتهای زیادی با کامپایلری که قبلاٌ برای دانلود (Dev-Cpp) در همین تاپیک گذاشته شده بکنه.

من در این تاپیک قصد دارم نحوه ایجاد یه پروژه جدید و اجرای اون رو قدم به قدم بگم:

 

1) روی File ، New و سپس project کلیک کنین.

 

2) به پروژه یک نام دلخواه بدید.

 

3) روی ok کلیک کنین.

 

4) سپس Win32 Application Wizard رو انتخاب کنین و به ترتیب Empty Project و Finish رو بزنید.

 

5) اگر Solution Explorer در دسترس نبود از tab view اون رو انتخاب کنین.

 

6) حالا با راست کلیک کردن بر روی Source Files folder در Solution Explorer و انتخاب add و سپس New item یک source file جدید به فایل بیافزایید. C++ File (.cpp) رو انتخاب نمایید.

7) در فایل cpp کد مورد نظر خود را بنویسید.

 

8) حتما راهنمای using namespace std; رو به برنامه خودتون اضافه کنین.

 

9) بر روی build کلیک کنین و Build Solution رو انتخاب کنین.

 

10) و بالاخره با انتخاب Debug menu و Start without Debugging. نتیجه ی برنامه رو در output ببنید.wink.gif

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...