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

  • از

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

دانلود فایل

 

 

با پایتون سی شارپ شیرافکن دیوید ب. ماکوفسکی مترجم عین الله جعفرنژاد قمی محم علمی کاربردی ضا ماهر پیام نور علی کریم

 

 

 

 

 

 

 

‌‌‌‌‌ً “” “” “” ++ “” “” “” ‌# () ‌‌‌(‌‌‌‌). # ++ “”. ً ++ ::
?:
*
” “. ” ” . : ++
++ پایه، دستکاری بیت، غیر جهت، مقایسه ها، عملیات منطقی و موارد دیگر را پوشش می دهد. تقریباً همه عملگرها را می‌توان برای انواع تعریف‌شده توسط کاربر، با چند استثناء قابل توجه مانند دسترسی اعضا ( .و .*) و همچنین عملگر شرطی بارگذاری کرد. مجموعه غنی از اپراتورهای قابل بارگیری برای اینکه انواع تعریف شده توسط کاربر در C++ مانند انواع داخلی به نظر برسند، مرکزی است.

برنامه نویسی شبکه

برنامه نویسی شبکه

اپراتورهای قابل بارگیری همچنین بخش اساسی بسیاری از جزوه برنامه نویسی شبکه های برنامه نویسی پیشرفته C++ مانند اشاره گرهای هوشمند هستند. بارگذاری بیش از حد یک اپراتور، اولویت محاسبات مربوط به اپراتور را تغییر نمی دهد، و همچنین تعداد عملوندهایی را که اپراتور استفاده می کند تغییر نمی دهد (هر عملوند ممکن است توسط اپراتور نادیده گرفته شود، اگرچه قبل از اجرا ارزیابی می شود). اپراتورهای ” &&” و ” ” با بارگذاری بیش از حد ، ویژگی ارزیابی اتصال کوتاه خود را از دست می دهند . ||

چند شکلی
همچنین ببینید: چندشکلی (علوم کامپیوتر)
Polymorphism یک رابط مشترک را برای بسیاری از پیاده سازی ها و برای اشیا در شرایط مختلف امکان می دهد.

C++ از چندین نوع پلی مورفیسم ایستا (حل شده در زمان کامپایل ) و پویا (حل شده در زمان اجرا ) پشتیبانی می کند که توسط ویژگی های زبانی که در بالا توضیح داده شد پشتیبانی می شوند. چند شکلی زمان کامپایل برای تصمیمات زمان اجرا خاصی اجازه نمی دهد، در حالی که پلی مورفیسم زمان اجرا معمولاً جریمه عملکرد را متحمل می شود.

پلی مورفیسم ایستا
همچنین نگاه کنید به: چندشکلی پارامتریک و چندشکلی ad hoc
بارگذاری بیش از حد تابع به برنامه ها اجازه می دهد تا چندین توابع را با نام یکسان اما با آرگومان های متفاوت اعلام کنند (یعنی چند شکلی ad hoc ). توابع با تعداد یا انواع پارامترهای رسمی خود متمایز می شوند . بنابراین، نام یک تابع بسته به زمینه ای که در آن استفاده می شود، می تواند به توابع مختلفی اشاره کند. نوع برگردانده شده توسط تابع برای تشخیص توابع بیش از حد بارگذاری شده استفاده نمی شود و انواع برگشتی متفاوت منجر به پیام خطای زمان کامپایل می شود.

هنگام اعلام یک تابع، یک برنامه نویس می تواند برای یک یا چند پارامتر یک مقدار پیش فرض را تعیین کند. انجام این کار به پارامترهای دارای پیش‌فرض اجازه می‌دهد تا به صورت اختیاری هنگام فراخوانی تابع حذف شوند، در این صورت از آرگومان‌های پیش‌فرض استفاده می‌شود. هنگامی که یک تابع با آرگومان های کمتر از پارامترهای اعلام شده فراخوانی می شود، آرگومان های صریح با پارامترها به ترتیب چپ به راست مطابقت داده می شوند و به هر پارامتری که در انتهای فهرست پارامترها وجود ندارد، آرگومان های پیش فرض آنها اختصاص داده می شود. در بسیاری از موارد، تعیین آرگومان های پیش فرض در یک اعلان تابع به ارائه تعاریف تابع بیش از حد با تعداد پارامترهای مختلف ارجحیت دارد.

الگوها در C++ یک مکانیسم پیچیده برای نوشتن کدهای عمومی و چند شکلی (یعنی چندشکلی پارامتریک ) ارائه می‌کنند. به طور خاص، از طریق الگوی الگوی تکرارشونده عجیب ، می‌توان شکلی از چندشکلی استاتیک را پیاده‌سازی کرد که به‌خوبی از نحو برای نادیده گرفتن توابع مجازی تقلید می‌کند. از آنجایی که قالب‌های ++C از نوع آگاه و تورینگ کامل هستند، می‌توان از آنها برای حل کردن شرط‌های بازگشتی به کامپایلر و ایجاد برنامه‌های اساسی از طریق فرابرنامه‌نویسی الگو استفاده کرد. بر خلاف برخی نظرها، کد قالب پس از کامپایل با تنظیمات مناسب کامپایلر، کد انبوه تولید نمی کند. [69]

 

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

همچنین ببینید: زیر تایپ
اشاره گرهای متغیر و ارجاع به یک نوع کلاس پایه در C++ همچنین می توانند به اشیاء هر کلاس مشتق شده از آن نوع اشاره کنند. این به آرایه ها و انواع دیگر کانتینرها اجازه می دهد تا نشانگرها را به اشیاء با انواع مختلف نگه دارند (مرجعات را نمی توان مستقیماً در جزوه برنامه نویسی شبکه نگه داشت). این امر چندشکلی پویا (زمان اجرا) را امکان پذیر می کند، که در آن اشیاء ارجاع شده بسته به نوع (واقعی، مشتق شده) آنها می توانند رفتار متفاوتی داشته باشند.

C++ همچنین اپراتور را فراهم می کند که به کد اجازه می دهد تا با خیال راحت یک شی را از طریق یک مرجع / اشاره گر پایه به یک نوع مشتق شده تر تبدیل کند: downcasting . این تلاش ضروری است زیرا اغلب نمی‌دانیم به کدام نوع مشتق شده اشاره شده است. ( به‌روزرسانی ، تبدیل به یک نوع عمومی‌تر، همیشه می‌تواند در زمان کامپایل از طریق بررسی/اجرا شود ، زیرا کلاس‌های اجدادی در رابط کلاس مشتق‌شده مشخص شده‌اند که برای همه تماس‌گیرندگان قابل مشاهده است.) به اطلاعات نوع زمان اجرا (RTTI) وابسته است. ابرداده در برنامه که امکان تمایز انواع و روابط آنها را فراهم می کند. اگر a به یک اشاره گر شکست بخورد، نتیجه این استdynamic_caststatic_castdynamic_castdynamic_castnullptrثابت، در حالی که اگر مقصد یک مرجع باشد (که نمی تواند تهی باشد)، بازیگران یک استثنا می اندازند. اشیایی که از یک نوع مشتق شده مشخص می‌باشند را می‌توان با دور زدن RTTI و بررسی نوع زمان اجرا ایمن به آن ریخت ، بنابراین فقط در صورتی باید از این مورد استفاده شود که برنامه‌نویس کاملاً مطمئن باشد که بازیگران معتبر هستند و همیشه معتبر خواهند بود. static_castdynamic_cast

توابع عضو مجازی
معمولاً، وقتی تابعی در یک کلاس مشتق شده ، تابعی در کلاس پایه را لغو می کند ، تابعی که باید فراخوانی شود با نوع شی تعیین می شود. یک تابع معین زمانی لغو می شود که تفاوتی در تعداد یا نوع پارامترها بین دو یا چند تعریف از آن تابع وجود نداشته باشد. از این رو، در زمان کامپایل، تنها با توجه به یک اشاره گر کلاس پایه، ممکن است امکان تعیین نوع شی و بنابراین تابع صحیح برای فراخوانی وجود نداشته باشد. بنابراین تصمیم به زمان اجرا موکول می شود. به این امر اعزام پویا می گویند . توابع یا روش های عضو مجازی [72]اجازه می دهد تا خاص ترین پیاده سازی تابع، با توجه به نوع زمان اجرا واقعی شی، فراخوانی شود. در پیاده سازی های C++، این معمولاً با استفاده از جداول توابع مجازی انجام می شود . اگر نوع شی مشخص باشد، ممکن است با اضافه کردن یک نام کلاس کاملاً واجد شرایط قبل از فراخوانی تابع، از این موضوع دور زده شود، اما به طور کلی فراخوانی‌های توابع مجازی در زمان اجرا حل می‌شوند.

علاوه بر عملکردهای عضو استاندارد، اضافه بارهای اپراتور و تخریب کننده ها می توانند مجازی باشند. یک قانون غیر دقیق مبتنی بر تجربه عملی بیان می کند که اگر هر عملکردی در کلاس مجازی است، تخریب کننده نیز باید باشد. از آنجایی که نوع یک شی در زمان ایجاد آن در زمان کامپایل مشخص است، سازنده‌ها و سازنده‌های کپی پسوند نمی‌توانند مجازی باشند. با این وجود، زمانی که یک اشاره گر به یک شی مشتق شده به عنوان یک اشاره گر به یک شی پایه ارسال می شود، ممکن است شرایطی ایجاد شود که یک کپی از یک شی باید ایجاد شود. در چنین حالتی، یک راه حل رایج ایجاد یک تابع مجازی (یا مشابه) است که در هنگام فراخوانی، یک کپی از کلاس مشتق شده ایجاد کرده و برمی گرداند. clone()

یک تابع عضو را نیز می توان با ضمیمه کردن آن با پس از پرانتز بسته و قبل از نقطه ویرگول، “مجازی مجازی” کرد. کلاسی که حاوی یک تابع مجازی خالص باشد، کلاس انتزاعی نامیده می شود . اشیاء را نمی توان از یک کلاس انتزاعی ایجاد کرد. آنها فقط می توانند از آنها مشتق شوند. هر کلاس مشتق شده تابع مجازی را به صورت خالص به ارث می برد و باید یک تعریف غیر خالص از آن (و سایر توابع مجازی خالص دیگر) قبل از ایجاد اشیاء کلاس مشتق شده ارائه دهد. برنامه ای که سعی می کند یک شی از یک کلاس را با یک تابع عضو مجازی خالص یا تابع عضو مجازی خالص به ارث برده ایجاد کند، شکل بدی ندارد. = 0

عبارات لامبدا
C++ از توابع ناشناس پشتیبانی می کند که به عبارات لامبدا نیز معروف جزوه برنامه نویسی شبکه، با شکل زیر: [73]

[ capture ]( پارامترها ) -> return_type { function_body }
از C++20، می‌توانید پارامترهای الگو را روی لامبدا بدون کلمه کلیدی بنویسید : template

[ ضبط ] < template_parameters > ( پارامترها ) -> return_type { function_body }
اگر لامبدا هیچ پارامتری دریافت نکند و هیچ نوع بازگشتی یا سایر مشخص‌کننده‌ها استفاده نشود، () را می‌توان حذف کرد، یعنی:

[ عکسبرداری ] { function_body }
نوع برگشتی یک عبارت لامبدا را می توان به طور خودکار استنباط کرد، در صورت امکان، به عنوان مثال:

[]( int x , int y ) { return x + y ; } // استنتاج شد []( int x , int y ) -> int { return x + y ; } // صریح

لیست از تعریف بسته شدن پشتیبانی می کند . چنین عبارات لامبدا در استاندارد به عنوان قند نحوی برای یک شی تابع بی نام تعریف شده است . [capture]

رسیدگی به استثناء
مدیریت استثنا برای ارتباط وجود یک مشکل یا خطا در زمان اجرا از جایی که شناسایی شده تا جایی که مشکل قابل رسیدگی است استفاده می شود. [74] این اجازه می دهد تا این کار به صورت یکنواخت و جدا از کد اصلی انجام شود، در حالی که همه خطاها را شناسایی می کند. [75] اگر خطایی رخ دهد، یک استثنا پرتاب می‌شود (بالا می‌رود)، که سپس توسط نزدیک‌ترین کنترل‌کننده استثنای مناسب دستگیر می‌شود. استثنا باعث می شود که محدوده فعلی خارج شود، و همچنین هر محدوده بیرونی (تکثیر) تا زمانی که یک کنترل کننده مناسب پیدا شود، به نوبه خود تخریب کنندگان هر شیء را در این محدوده های خارج شده فرا می خواند. [76] در همان زمان، یک استثنا به عنوان یک شی ارائه می شود که داده های مربوط به مشکل شناسایی شده را حمل می کند. [77]

برخی از راهنماهای سبک C++، مانند گوگل، [78] LLVM، [79] و Qt [80] استفاده از استثناها را ممنوع می‌کنند.

کد ایجاد استثنا در داخل یک بلوک قرار می گیرد. جزوه برنامه نویسی شبکه در بلوک های جداگانه (هندلرها) مدیریت می شوند. هر بلوک می تواند چندین کنترل کننده استثنا داشته باشد، همانطور که در مثال زیر قابل مشاهده است. [81]trycatchtry

#include <iostream>
#include <بردار>
#include <stdexcept>

int main () {
امتحان کن {
std :: vector < int > vec { 3 , 4 , 3 , 1 };
int i { vec . در ( 4 )}; // یک استثنا پرتاب می کند، std::out_of_range (شاخص سازی برای vec از 0-3 است نه 1-4)
}
// یک کنترل کننده استثنا، std::out_of_range را می گیرد که توسط vec.at(4) پرتاب می شود.
catch ( std :: out_of_range & e ) {
std :: cerr << “دسترسی به عنصری که وجود ندارد: ” << e . what () << ‘n’ ;
}
// برای گرفتن سایر استثناهای کتابخانه استاندارد (آنها از std::exception مشتق می شوند)
catch ( std :: استثنا و e ) {
std :: cerr << “Exception انداخته شد: ” << e . what () << ‘n’ ;
}
// همه استثناهای ناشناخته را بگیرید (یعنی مواردی که از std::exception مشتق نمی شوند)
گرفتن (…) {
std :: cerr << “خطای مرگبار n ” ;
}
}
همچنین می توان استثناها را به صورت هدفمند با استفاده از کلمه کلیدی مطرح کرد. این استثنائات به روش معمول رسیدگی می شود. در برخی موارد، به دلایل فنی نمی توان از استثناها استفاده کرد. یکی از این نمونه ها یک جزء حیاتی از یک سیستم تعبیه شده است، که در آن هر عملیات باید تضمین شود که در مدت زمان مشخصی تکمیل شود. این را نمی توان با استثنا تعیین کرد زیرا هیچ ابزاری برای تعیین حداکثر زمان لازم برای رسیدگی به یک استثنا وجود ندارد. [82]throw

برخلاف مدیریت سیگنال ، که در آن تابع هندلینگ از نقطه شکست فراخوانی می‌شود، مدیریت استثنا قبل از وارد شدن بلوک catch از محدوده فعلی خارج می‌شود، که ممکن است در تابع فعلی یا هر یک از فراخوانی‌های تابع قبلی در حال حاضر در پشته قرار داشته باشد.

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

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

انواع برشمرده شده
این بخش گزیده ای از نوع Enumerated § C++ است. [ ویرایش ]
C++ دارای انواع enumeration است که مستقیماً از C به ارث برده شده‌اند و عمدتاً مانند اینها کار می‌کنند، با این تفاوت که enumeration یک نوع واقعی در C++ است که بررسی زمان کامپایل را اضافه می‌کند. همچنین (مانند ساختارها)، enumکلمه کلیدی C++ به طور خودکار با یک typedef ترکیب می شود ، به طوری که به جای نامگذاری نوع enum name، به سادگی آن را نامگذاری کنید name. این را می توان در C با استفاده از typedef شبیه سازی کرد:typedef enum {Value1, Value2} name;

C++11 همچنین نوع دومی از شمارش را ارائه می‌کند که به آن جزوه برنامه نویسی شبکه محدوده‌ای می‌گویند . اینها از نظر نوع ایمن هستند: شمارشگرها به طور ضمنی به یک نوع عدد صحیح تبدیل نمی شوند. در میان چیزهای دیگر، این اجازه می دهد تا جریان ورودی/خروجی برای نوع شمارش تعریف شود. یکی دیگر از ویژگی‌های شمارش‌های دامنه‌دار این است که شمارشگرها نشت نمی‌کنند، بنابراین استفاده از آن نیاز به پیشوند با نام شمارش دارد (مثلاً Color::Redبرای اولین شمارشگر در مثال زیر)، مگر اینکه از یک using enumاعلان (معرفی شده در C++20 ) استفاده شده باشد. تا شمارش كنندگان را به محدوده فعلي وارد كند. یک شمارش محدوده با عبارت enum class(یا enum struct) مشخص می شود. مثلا:

enum class Color { Red , Green , Blue };
نوع زیربنایی یک شمارش یک نوع انتگرال تعریف شده توسط پیاده سازی است که به اندازه کافی بزرگ است تا همه مقادیر شمارش شده را در خود جای دهد. لازم نیست کوچکترین نوع ممکن باشد. نوع زیربنایی را می توان مستقیماً مشخص کرد، که امکان “اعلامیه های پیش رو” شمارش ها را فراهم می کند:

enum class رنگ : طولانی { قرمز , سبز , آبی }; // باید در اندازه و چیدمان حافظه با نوع ‘long’ enum class متناسب باشد Shapes : char ; // اعلامیه فوروارد. اگر بعداً مقادیری تعریف شده باشند که در «char» جا نمی‌شوند، یک خطا است.

کتابخانه استاندارد

پیش نویس استاندارد “Working Paper” که به عنوان C++98 تایید شد. نیمی از اندازه آن به کتابخانه استاندارد C++ اختصاص یافت.
مقاله اصلی: کتابخانه استاندارد C++
استاندارد C++ از دو بخش تشکیل شده است: زبان اصلی و کتابخانه استاندارد. برنامه نویسان C++ در هر پیاده سازی اصلی C++ انتظار دومی را دارند [ شفاف سازی ] ; شامل انواع انبوه ( بردارها ، لیست‌ها، نقشه‌ها، مجموعه‌ها، صف‌ها، پشته‌ها، آرایه‌ها، تاپل‌ها)، الگوریتم‌ها (یافتن، برای_هرک ، جزوه برنامه نویسی شبکه ، تصادفی_تصادفی ، و غیره)، امکانات ورودی/خروجی ( iostream ، برای خواندن و نوشتن به کنسول و فایل ها)، کتابخانه سیستم فایل، پشتیبانی محلی سازی، اشاره گرهای هوشمند برای مدیریت خودکار حافظه، پشتیبانی از بیان منظم ، چند رشته ایکتابخانه، پشتیبانی اتمی (اجازه دادن به یک متغیر برای خواندن یا نوشتن حداکثر توسط یک رشته در یک زمان بدون هیچ گونه هماهنگی خارجی)، ابزارهای زمانی (اندازه گیری، دریافت زمان جاری و غیره)، سیستمی برای تبدیل گزارش خطا که انجام نمی دهد. از استثناهای C++ در استثناهای C++، یک مولد اعداد تصادفی و یک نسخه کمی تغییر یافته از کتابخانه استاندارد C (برای مطابقت با سیستم نوع C++) استفاده کنید.

بخش بزرگی از کتابخانه ++C بر اساس کتابخانه قالب استاندارد (STL) است. ابزارهای مفید ارائه شده توسط STL شامل کانتینرهایی مانند مجموعه اشیاء (مانند بردارها و لیست ها )، تکرار کننده هایی است که دسترسی آرایه مانند به کانتینرها را فراهم می کند و الگوریتم هایی که عملیات هایی مانند جستجو و مرتب سازی را انجام می دهند.

علاوه بر این، (چند) نقشه‌ها ( آرایه‌های انجمنی ) و (چند) مجموعه‌ها ارائه شده‌اند که همگی رابط‌های سازگار صادر می‌کنند. بنابراین، با استفاده از الگوها می توان الگوریتم های عمومی را نوشت که با هر ظرف یا هر دنباله ای که توسط تکرار کننده ها تعریف شده است کار می کند. همانطور که در C، ویژگی های کتابخانه با استفاده از #include دستورالعمل برای گنجاندن یک هدر استاندارد قابل دسترسی است. کتابخانه استاندارد C++ 105 سرصفحه استاندارد را ارائه می دهد که 27 مورد از آنها منسوخ شده است.

این استاندارد شامل STL است که در ابتدا توسط الکساندر استپانوف طراحی شده بود که سال ها با الگوریتم ها و کانتینرهای عمومی آزمایش کرد. زمانی که او با C++ شروع کرد، سرانجام زبانی را پیدا کرد که در آن امکان ایجاد الگوریتم‌های عمومی (مثلاً مرتب‌سازی STL) وجود داشت که حتی بهتر از مثلاً Qsort کتابخانه استاندارد C عمل می‌کرد، به لطف ویژگی‌های C++ مانند استفاده از inlining و کامپایل- زمان اتصال به جای نشانگرهای تابع. استاندارد به آن به عنوان “STL” اشاره نمی کند، زیرا صرفاً بخشی از کتابخانه استاندارد است، اما این اصطلاح هنوز به طور گسترده برای متمایز کردن آن از بقیه کتابخانه استاندارد (جریان های ورودی/خروجی، بین المللی سازی، تشخیص، زیر مجموعه کتابخانه C و غیره). [83]

اکثر کامپایلرهای C++ و همه کامپایلرهای اصلی، پیاده سازی مطابق با استانداردهای کتابخانه استاندارد C++ را ارائه می دهند.

رهنمودهای اصلی C++
دستورالعمل‌های هسته C++ [84] ابتکاری است که توسط Bjarne Stroustrup، مخترع C++، و Herb Sutter، گردآورنده و رئیس گروه کاری C++ ISO، رهبری می‌شود تا به برنامه‌نویسان کمک کند تا با استفاده از بهترین شیوه‌ها برای زبان، «C++ مدرن» بنویسند. استانداردهای C++11 و جدیدتر، و برای کمک به توسعه دهندگان کامپایلرها و ابزارهای بررسی استاتیک برای ایجاد قوانینی برای کشف شیوه های برنامه نویسی بد.

هدف اصلی نوشتن کارآمد و پیوسته از نوع و منبع امن C++ است.

دستورالعمل های اصلی [85] در جزوه برنامه نویسی شبکه افتتاحیه در CPPCon 2015 اعلام شد.

رهنمودها با کتابخانه پشتیبانی راهنما (GSL)، [86] یک کتابخانه فقط سرصفحه ای از انواع و توابع برای پیاده سازی دستورالعمل های اصلی و ابزارهای جستجوگر ایستا برای اجرای قوانین دستورالعمل همراه است. [87]

سازگاری
برای دادن آزادی بیشتر به فروشندگان کامپایلر، کمیته استانداردهای C++ تصمیم گرفت اجرای نام‌ها ، مدیریت استثناها و سایر ویژگی‌های خاص پیاده‌سازی را دیکته نکند. نقطه ضعف این تصمیم این است که انتظار می رود کد شی تولید شده توسط کامپایلرهای مختلف ناسازگار باشد. با این حال، تلاش‌هایی برای استانداردسازی کامپایلرها برای ماشین‌ها یا سیستم‌های عامل خاص (به عنوان مثال C++ ABI) وجود داشت، [88] اگرچه به نظر می‌رسد که اکنون تا حد زیادی رها شده‌اند.

با سی
اطلاعات بیشتر: سازگاری C و C++
C++ اغلب به عنوان ابرمجموعه C در نظر گرفته می شود، اما این کاملاً درست نیست. [89] اکثر کدهای C می توانند به راحتی در C++ به درستی کامپایل شوند، اما چند تفاوت وجود دارد که باعث می شود برخی از کدهای C معتبر نامعتبر باشند یا در C++ متفاوت رفتار کنند. به عنوان مثال، C اجازه می دهد تا تبدیل ضمنی از انواع اشاره گر دیگر را انجام دهد، اما C++ اجازه نمی دهد (به دلایل ایمنی نوع). همچنین، C++ بسیاری از کلیدواژه‌های جدید مانند و را تعریف می‌کند که ممکن است به عنوان شناسه (مثلاً نام متغیرها) در برنامه C استفاده شوند. void*newclass

برخی از ناسازگاری ها با تجدید نظر در سال 1999 استاندارد C ( C99 ) حذف شده اند، که اکنون از ویژگی های C++ مانند نظرات خط ( //) و اعلان های مخلوط با کد پشتیبانی می کند. از سوی دیگر، C99 تعدادی ویژگی جدید را معرفی کرد که C++ از آنها پشتیبانی نمی کرد و در C++ ناسازگار یا اضافی بودند، مانند آرایه های با طول متغیر ، انواع اعداد مختلط بومی (با این حال، کلاس موجود در کتابخانه استاندارد C++ عملکرد مشابهی را ارائه می کند. ، اگرچه با کد سازگار نیست)، مقداردهی اولیه، لفظ ترکیبی و کلمه کلیدی جزوه برنامه نویسی شی گرا شده است. [90] برخی از ویژگی های معرفی شده توسط C99 در نسخه بعدی استاندارد C++، C++11 گنجانده شد.std::complexrestrict(از آنهایی که زائد نبودند). [91] [92] [93] با این حال، استاندارد C++11 ناسازگاری‌های جدیدی را معرفی می‌کند، مانند عدم تخصیص یک رشته تحت اللفظی به یک اشاره‌گر کاراکتر، که C معتبر باقی می‌ماند.

برای ترکیب کد C و C++، هر اعلان یا تعریف تابعی که قرار است از C و C++ فراخوانی شود/استفاده شود، باید با پیوند C با قرار دادن آن در یک بلوک اعلام شود. چنین عملکردی ممکن است به ویژگی‌های بسته به انحراف نام (یعنی بارگذاری بیش از حد تابع) وابسته نباشد. extern “C” {/*…*/}

انتقاد
مقاله اصلی: نقد C++
علیرغم پذیرش گسترده آن، برخی از برنامه نویسان برجسته زبان C++ را مورد انتقاد قرار داده اند، از جمله لینوس توروالدز ، [94] ریچارد استالمن ، [95] جاشوا بلوخ ، کن تامپسون [96] [97] [98] و دونالد کنوت . [99] [100]

یکی از مواردی که اغلب مورد انتقاد C++ قرار می گیرد پیچیدگی درک شده آن به عنوان یک زبان است، با این انتقاد که تعداد زیادی از ویژگی های غیر متعامد ++ :

‌++ ‌‌‌ً ++‌‌: «++ ‌‌‌‌‌» (++ )، “++” “”: [99] [100]

++ ++ “”.

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *