Arvanttt

تند و سریع

Arvant

تند و سریع












ویژگی های جدید C++ 11:بخش دوم

شنبه, ۷ دی ۱۳۹۲، ۱۱:۵۳ ق.ظ

override

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

به عنوان مثال در استاندارد قدیم

 

struct Base {
    virtual void some_func(float);
};
 
struct Derived : Base {
    virtual void some_func(int);
};

هیچ مشکلی ایجاد نمی کرد و هنگام فراخوانی کلاس Derived::some_func تابعی که در کلاس پایه تعریف شده است برخلاف انتظار برنامه نویس فراخوانی نخواهد شد و به صورت یک سربار گذاری در نظر گرفته خواهد شد.

که در استاندارد جدید این مشکل برطرف گردیده 

struct Base {
    virtual void some_func(float);
};
 
struct Derived : Base {
    virtual void some_func(int) override; // ill-formed - doesn't override a base class method
};

Lambda

این نوع توابع که در اکثر زبان های مدرن امروزی موجود هستند می توانند ابزار جالبی برای برنامه  نویسی و ایجاد توابع دم دستی باشد .در استاندارد جدید این نوع  توابع که از نوع std::function هستند را می توان مورد استفاده قرار داد .

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

std::function<int(int)> lfib = [&lfib](int n) {return n < 2 ? 1 : lfib(n-1) + lfib(n-2);};

شیوه کلی تعریف به این صورت است 

[capture](parameters)->return-type {body}

capture : مشخص کننده نام مورد نظر است

parameters : پارامتر های ورودی

return type:  نوع بازگشتی

و دستورات بدنه نیز در داخل {} جای خواهند گرفت

مثال زیر نحوه استفاده از این نوع توابع را بازگو می کند که کل عناصر یک آرایه را به شکل بزرگ آن تبدیل می کند

int main()
{
   char s[]="Hello World!";
   int Uppercase = 0; //modified by the lambda
   for_each(s, s+sizeof(s), [&Uppercase] (char c) {
    if (isupper(c))
     Uppercase++;
    });
 cout<< Uppercase<<" uppercase letters in: "<< s<<endl;
}
  • موافقین ۰ مخالفین ۰
  • شنبه, ۷ دی ۱۳۹۲، ۱۱:۵۳ ق.ظ
به اشتراک می گذارم : به اشتراک بگذاریم به اشتراک بگذاریم به اشتراک بگذاریم به اشتراک بگذاریم

نظرات  (۷)

سلام . میشه یه کم در مورد برنامه نویسی ios توضیحات بدین؟؟؟
فرق objective c با ++c و .....
پاسخ:
برای بازی سازی که بستگی به انجینی که شما استفاده می کنی در IOS می تونید از زبان های ++C یا Lua یا objective c استفاده کنید .
فرق اون دوتا هم مثل فرق نارنگی  و پرتقاله :) پایه هر دوتاشون C هست و تا بخش مربوط به شی گرای سینتکس مشابهی دارند ولی Objective C روی محصولات اپل جایگاه ویژه ای داره و بیشتر طرف دارای این زبان هم به همین خاطر سراغش میرن من که به شخصه اصلا از سنتکسش و اینا خوشم نی اومد :) 
سی پلاس پلاس هم که همه جا استفاده میشه لینوکس و ویندوز و مک و یونیکس.در کل برای برنامه کاربردی نوشتن آندروید و java  و مک و ای دیوایس ها objective C و برای کارای گیم که هم چند پلتفرمی و هم سرعت مهمه ++C هر چیزی را بهر کاری ساختن.

حتما نیاز به دیوایس مک داریم ؟؟؟؟  بازی سازی منظورم نیست
پاسخ:
اگه به صورت حرفه ای بخوای بله حتماَ شما نیاز به یک مک دیوایس و XCode دارید .که برای این کار باید یا مک دیوایس بخرید یا مثل من یک هکینتاش راهبندازید.(راهنمای کلی رو تو این مطلب توضیح دادم).
به جز مک دیوایس برای تست برنامه ها رو سخت افزار واقعی حتی اگه گوشی ایفون هم داشته باشید برای تست روی گوشی خودتون نیاز به خرید اکانت اپل دولوپر (سالیانه 100 دلار )دارید که برای دور زدن این روش هم می تونید گوشی یا ایپد جیلبریک شده استفاده کنید .

شما برنامه سازی رو کدوم رو ترجیح میدین؟؟ ios android???
پاسخ:
من به شخصه برنامه نویسی برای آندروید رو بیشتر دوست دارم از جمله دلایلم هم می تونه اینا باشه .
بستر باز (الان یه مدته هوایی شدم یکم بیشتر در مورد درایور نویسی در لینوکس و آندروید بیشتر بدونم و دوست دارم اگه وقت اضافه ای داشتم بیشتر در این حوضه سرک بکشم )
سادگی در پیش نیاز های لازم (کلیه ابزار برنامه نویسی هم برای لینوکس و هم  برای ویندوز) به سادگی در دسترس هستند .
وجود فروشگاه های نرم افزاری که اقدام به فروش نرم افزارهای کاربرای ایرانی می کنند زیاده
علاقه بیشتر به جاوا تا ابجکتیو سی (اصلا از ابجکتیو سی خوشم نی اومد)
وجود ابزار های اندرویدی بیشتر بین مردم و راحتی دسترسی به یکی از اون ها (نکسوس هفت الان 700 تومان قیمت دارد)
و...
البته من برنامه بادا رو تا حدودی و برنامه نویسی اندروید رو فقط در حد خوندن یک رفرنس انجام دادم و روی IOS هم فقط یه رفرنس کلی مطالعه کردم و روی هیچ کدوم از این پلتفرم ها صاحب نظر نیستم :) فقط چون پرسیدید شما کدوم رو ترجیح میدید نظرم رو گفتم :)
اگه دنبال بازار کار باشید بازار کار اندروید وسیع تر و بازار کار ای او اس پولساز تر است :)
Chera migin pulsaz tar???
پاسخ:
تعداد برنامه نویس هایی که در حال توسعه برای IOS هستند به مراتب کمتر از توسعه دهنده های اندروید هست و همین کمبود خودش باعث بالا رفتن درامد میشه درثانی چون افرادی که معمولاَ دنبال دولوپر برای ای او اس هستند یعنی اینکه تونستند که یه جوری تحریم ها رو دور بزنند و به احتمال قوی هدف اونا خود اپ استور هست پس باز هم نحوه درامد این افراد بیشتر است .در حالت کلی هم میزان درامدی که توسعه دهنده ها از اپ استور دارند بیشتر از گوگل پلی هستش .البته من دید خودم رو از روی  چیزی که تو نت از بچه های که توسعه دهنده اپل و دوستان خودم که اندروید کار هستند عرض کردم.
پیشنهاد شما برا شروع objective c چیه؟؟؟
چه کتابی خربه؟؟
و ترتیب چیه همون اول برم objective c ??
پاسخ:
اگه واقعاَ خواستی شروع کنی برای توسعه IOS من یه کتاب فارسی از انتشارات ناقوس برای شروع برنامه نویسی objective c دارم تو نت بگردی پیدا می کنی.
ولی من کلاَ سطح برنامه نویسی شما رو نمی دونم ولی به نظرم اگه قبلاَ زیاد برنامه نویسی کار نکردید.با جاوا و اندروید شروع کنید چون منابع فارسیش و دوستایی که تو فروم ها می تونید مشکلاتتون رو باهاشون مطرح کنید به مراتب بیشتره .همچنین به نظرم جاوا از ابجکتیو سی ساده  تر میاد :)
با سی پلاس پلاس و سی شارپ تا حدودی آشنایی دارم. بهترین منبع انگلیسی به نظر شما کدومه؟؟
پاسخ:
این کتاب VISUAL QUICKStArt GUIDE objective-c در زمینه برنامه نویسی ابجکتیو سی خیلی عالیه که ترجمش هم توسط انتشارات ناقوس منتشر شده .من نسخه الکترونیکیش رو دارم شمام بگرد تو نت پیدا می کنی و نیاز به منبع انگلیسی فکر نمی کنم داشته باشی .
برای خود برنامه نویسی IOS هم من قبلاَ که دنبالش بودم به نظرم برای شروع کتاب IOS 5 Application Development in 24 hourse برای شروع خیلی خوبه.البته من فقط نگاه اجمالی کردم بهش.