text: সি++ (উচ্চারণ: সি প্লাস প্লাস) একটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা। ১৯৮০ সালে বিয়ারনে স্ট্রোভস্ট্রুপ (Bjarne Stroustrup) যুক্তরাষ্ট্রের এটিএন্ডটি বেল ল্যাবরেটরিতে (AT&T Bell Laboratory) এটি ডেভেলপ করেন। মূলত সিমুলা৬৭ এবং সি প্রোগ্রামিং ভাষার সুবিধাজনক বৈশিষ্ট্যগুলোর সমন্বয় সাধন করে সি++ তৈরি হয়।
  
  এটি একটি মধ্যম শ্রেণীর প্রোগ্রামিং ভাষা যাতে উচ্চ শ্রেণী এবং নিম্ন শ্রেণীর ভাষাগুলোর সুবিধা সংযুক্ত আছে।
  এটি সর্বকালের অন্যতম জনপ্রিয় প্রোগ্রামিং ভাষা এবং সফটওয়্যার শিল্পে এটি বহুল ব্যবহৃত হয়। যেমন- সিস্টেম সফটওয়্যার, অ্যাপ্লিকেশন সফটওয়্যার, ডিভাইস ড্রাইভার, এম্বেডেড সফটওয়্যার, উচ্চ মানের সার্ভার ও ক্লায়েন্ট অ্যাপ্লিকেশন, বিনোদন সফটওয়্যার যেমন- ভিডিও গেম ইত্যাদি ক্ষেত্রে সি++ ব্যবহৃত হচ্ছে। সি++ এর বিভিন্ন মুক্ত এবং মালিকানাধীন কম্পাইলার আছে
  যা বিভিন্ন দল যেমন- জিএনইউ প্রকল্প, মাইক্রোসফট, ইন্টেল এবং বোরল্যান্ড সরবরাহ করে।
  
  সি++ পরবর্তী সময়ে বিভিন্ন প্রোগ্রামিং ভাষাকে প্রভাবিত করেছে যার মধ্যে সর্বাপেক্ষা উল্লেখযোগ্য হচ্ছে জাভা।
  
  সি এর সাথে এখানে যা সংযুক্ত করা হয়েছে তার মধ্যে উল্লেখযোগ্য কিছু হল- প্রথমে শ্রেণী (classes), পরবর্তীতে ভার্চুয়াল ফাংশন, অপারেটর ওভারলোডিং, মাল্টিপল ইনহেরিটেন্স, টেমপ্লেটস, ব্যতিক্রম গ্রহণ করার ক্ষমতা (exception handling), পলিমরফিজম ইত্যাদি।
  
  ইতিহাস 
  বিয়ারনে স্ট্রোভস্ট্রুপ|থাম্ব|ডান
  আশি ও নব্বইয়ের দশকে বেশিরভাগ সফটওয়্যার ডেভেলপাররা যে প্রোগ্রামিং ভাষাটা বেশি ব্যবহার করতেন, তা হলো "সি"। সি বের হবার পর থেকে এখন পর্যন্ত অ্যাপল কিংবা পিসিতে ম্যাক ওএস, ডস, উইন্ডোজ, লিনাক্স থেকে শুরু করে এসব অপারেটিং সিস্টেমে চালিত বেশিরভাগ প্রোগ্রাম লেখা হয় সি দিয়ে। সি দিয়ে যত বড় বড় প্রোগ্রাম লেখা হয়েছে, আর কোনও প্রোগ্রামিং ভাষায় তা হয়নি। Embeded সিস্টেম থেকে আরম্ভ করে অপারেটিং সিস্টেম, গ্রাফিক্স অ্যাপ্লিকেশন, ক্লায়েন্ট/সার্ভার ডেটাবেজ, থ্রিডি গেমস্, ডেটা কম্প্রেশন, নেটওয়ার্কিং, ভাইরাস, এন্টিভাইরাস সহ আরও অনেক ধরণের প্রোগ্রাম লেখা হয় সি দিয়ে। কিন্তু সি দিয়ে এতো কিছু করা গেলেও বড় প্রোগ্রাম তৈরী করতে গিয়ে কিছু সমস্যা ধরা পড়ে। যেমন কোনও প্রোগ্রাম যদি বেশি বড় মানে ১ লক্ষ লাইনের উপর হয়ে যায়, তাহলে সেই প্রোগ্রামের কিছু পরিবর্তন করতে গেলে কিংবা নতুন কিছু যোগ করতে গেলে অনাকাঙ্খিত কিছু ভুলও প্রোগ্রামে যোগ হতে পারে। কেননা সি তে প্রোগ্রাম লেখার জন্য structured কিংবা procedural programming পদ্ধতি অনুসরণ করা হয়। আর এই পদ্ধতিতে যেভাবে data abstraction করা হয়, সেক্ষেত্রে প্রোগ্রাম বড় হয়ে গেলে সব ডেটার প্রতি ঠিকমতো নজর দেয়া যায় না। ১৯৮০ সালে এটিএন্ডটি বেল ল্যাবরেটরিজ এ ইউনিক্স কার্নেল নিয়ে গবেষণা করতে গিয়ে বিয়ারনে স্ট্রোভস্ট্রুপ (Bjarne Stroustrup) এ ধরণের কিছু সমস্যার সম্মুখীন হোন। তখন তিনি নতুন একটা প্রোগ্রামিং ভাষা তৈরী করার চেষ্টা করেন। এই প্রোগ্রামিং ভাষা তৈরী করার সময় এর প্রাথমিক উপাদানগুলোর জন্য নতুন syntax তৈরী না করে সে সময়কার সবচেয়ে বেশি ব্যবহৃত ল্যাঙ্গুয়েজ সি-টাকে বেছে নেন এবং সেই সাথে আরও কিছু ল্যাঙ্গুয়েজের ভালো ফিচার তিনি এই নতুন ল্যাঙ্গুয়েজে যোগ করেন। যেমন সিমুলা থেকে নেন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর ধারণা, অ্যাডা'র generic এর ধারণাটা যোগ করেন template হিসেবে প্রভৃতি। আর এভাবে যে নতুন প্রোগ্রামিং ভাষা তৈরী করা হয়, শুরুতে তার নাম দেয়া হয়েছিলো "C with Classes"। 
  
  ১৯৮৩ সাল পর্যন্ত নতুন এই ভাষাটা শুধুমাত্র এটিএন্ডটি বেল ল্যাবরেটরিজ এর ভেতরেই ব্যবহার করা হতো। ১৯৮৩ সালের জুলাই মাসে এটাকে প্রথম এটিএন্ডটি বেল ল্যাবরেটরিজ এর বাইরে প্রোগ্রাম তৈরী করার জন্য ব্যবহার করা হয়। এ বছরই "C with Classes" নামটা Rick Mascitti পরিবর্তন করে রাখেন সি++। এই নামকরণের পেছনে যুক্তিটা হলো এরকম, সি তে ++ হলো increment অপারেটর এবং "C with Classes" হলো সি এরই increment ভার্সন। তাই নাম দেয়া হলো সি++।
  
  প্রমিতকরণ
  
  নামকরণ 
  
  সি++ নামটি এসেছে সি নামক প্রোগ্রামিং ভাষা থেকে। সি ভাষাতে পর পর দুটি যোগ চিহ্ন ব্যবহার করার অর্থ হলো কোন কিছুর মান এক বাড়ানো। অনেকটা সেই অর্থেই সি প্রোগ্রামিং-এর এক ধাপ উপরের একটি প্রোগ্রামিং ভাষা হিসেবে সি++ নামকরণটি এসেছে।
  তবে সি এবং সি++ এর প্রোগ্রাম কোডে অনেকটা পার্থক্য বিদ্যমান। কেননা সি হল ফাংশন নির্ভর ভাষা এবং সি++ হল বস্তু সংশ্লিষ্ট ( অবজেক্ট অরিয়েন্টেড) ভাষা। এটি মূলত সি ভাষার বর্ধিত রুপ।
  
  ভাষা 
  #include <iostream>    // Header File where C++ basic input output files are written
  using namespace std;   // standard namespace
  int main() {    //main function
      cout<<"This article is edited by Abdur Rahman"<<endl; //endl ends the line
      return  0;  
  }
  
  আউটপুট : This article is edited by Abdur Rahman
  
  অপারেটর এবং অপারেটর ওভারলোডিং 
  
  সি++ এর ৩৫টির অধিক অপারেটর আছে যাদের মধ্যে অন্যতম হল বেসিক অ্যারিথমেটিক, বিট ম্যানিপুলেশন, ইন্‌ডিরেকশন, কম্পারিজন, লজিকাল এবং অন্যান্য অপারেটর। প্রায় সব অপারেটরকেই ইউজার ডিফাইনড টাইপ এর ওপর ভিত্তি করে ওভারলোড করা যাবে কিছু ব্যতিক্রম ছাড়া। ব্যতিক্রমগুলো পাশের টেবিলে দেওয়া আছে। মূলত অপারেটর ওভারলোডিং এসেছে যেন ইউজার ডিফাইনড ডাটা টাইপকে বিল্ট্‌ ইন ডাটা টাইপ এর মত ব্যবহার করা যায়। এছাড়া ওভারলোডিং উচ্চতর সি++ এরও অনেক জায়গায় ব্যবহৃত হয়। যেমন, স্মার্ট পয়েন্টার। অপারেটর ওভারলোডিং করলেও  ওভারলোডেড অপারেটরের হিসাব করার অগ্রগণ্যতার পরিবর্তন ঘটে না, এমনকি অপারেটরটির অপারেন্ড এর সংখ্যাও অপরিবর্তনীয় থাকে। ওভারলোডেড"&&" এবং "||" অপারেটর তাদের সর্ট-সার্কিট মূল্যায়ন ধর্ম হারিয়ে ফেলে।
  
  স্ট্যান্ডার্ড লাইব্রেরি 
  সি++ এর স্ট্যান্ডার্ড দুইটি অংশ নিয়ে গঠিতঃ মূল ভাষা ও স্ট্যান্ডার্ড লাইব্রেরি। সি++ এর প্রায় সকল প্রধান বাস্তবায়নের ক্ষেত্রে প্রোগ্রামাররা দ্বিতীয়টিকেই বেশি সুবিধাজনক হিসেবে দেখে। এটি সমগ্র টাইপস(ভেকটর,লিস্ট,ম্যাপ,সেট,অ্যারে ইত্যাদি),অ্যালগরিদম,ইনপুট-আউটপুট সুবিধা,অ্যাটোমিক সাপোর্ট,ফাইল সিস্টেম লাইব্রেরি, টাইম ইউটিলিটিস( বর্তমান সময় নির্ধারণ),সি++ এক্সেপশন ব্যবহার করে না এমন ত্রুটি রিপোর্টিং গুলোকে সি++ এক্সেপশনে রুপান্তরের পদ্ধতি, হালকা পরিমার্জিত স্ট্যান্ডার্ড লাইব্রেরির ভার্সন ইত্যাদি নিয়ে গঠিত।
  
  সি++ এর লাইব্রেরির বড় অংশই স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি(Standard Template Library-STL) এর  উপর নির্ভরশীল। STL কতৃক সরবরাহকৃত গুরুত্বপুর্ন কিছু সরঞ্জাম হলো বিভিন্ন অবজেকট এর সংগ্রহশালা হিসেবে  কন্টেইনারস(container),অ্যারে দ্বারা কন্টেইনারস এক্সসেস করার জন্য ইটারেটর(iterator) এবং অ্যালগরিদম যা দ্বারা বিভিন্ন ছোট ছোট কাজ যেমন সার্চিং ও সর্টিং(searching and sorting) সম্পাদিত হয়।
  
  এছাড়াও মাল্টি ম্যাপ, মাল্টি সেট ও STL কতৃক সরবরাহ করা হয় এবং এসকল উপাদান একটি সামঞ্জস্যপূর্ণ ইন্টারফেস তৈরি করে।অর্থাৎ টেমপ্লেট ব্যবহার করে খুবই সাধারন অ্যালগরিদম লেখা সম্ভব যা যেকোনো কনটেইনার এর সাথে বা ইটারেটর দ্বারা ডিফাইনকৃত যেকোনো ক্রমের সাথে কাজ করতে পারে।সি এর মতো করে লাইব্রেরির এই উপাদান গুলো উপলব্ধ করতে #include ডিরেক্টিভ ব্যবহার করে প্রোগ্রামে স্ট্যান্ডার্ড শিরোনাম যুক্ত করা হয়।সি++ স্ট্যান্ডার্ড লাইব্রেরি এমন ১০৫ টি স্ট্যান্ডার্ড শিরোনাম সরবরাহ করে।
  
  উদাহরণ 
  #include<iostream> //#include is the directive and iostream is a standard header
  
  স্ট্যান্ডার্ড এর সাথে লাইব্রেরির যে একীভূতকরণ সেটির আসল নকশা করেছিলেন আলেক্সানডার স্টেপানভ (Alexander Alexandrovich Stepanov) যিনি বহু বছর ধরে সাধারন অ্যালগরিদম এবং কনেটেইনারস নিয়ে গবেষণা চালিয়েছিলেন। সি++ দিয়ে শুরু করার পর তিনি বুঝতে পারলেন যে তিনি এমন এক প্রোগ্রামিং ল্যাংগুয়েজ পেয়েছেন যেটা দ্বারা অতিসাধারণ অ্যালগরিদম তৈরি করা সম্ভব।
  
  সি++ মূল সহায়িকা 
  সি++ মূল সহায়িকা হলো সি++ এর আবিষ্কারক  বিয়ারনে স্ট্রোভস্ট্রুপ এবং সি++ এর আইএসও গ্রুপের উদ্যোক্তা ও চেয়ারম্যান হার্ব শাটার এর নেতৃত্বে নেওয়া একটি উদ্যোগ যেটা দ্বারা প্রোগ্রামাররা আধুনিক সি++ লেখার জন্য সি++ ১৪ এবং এর পরবর্তী ল্যাংগুয়েজ স্ট্যান্ডার্ড এর কার্যকর অনুশীলনের মাধ্যমে উপকৃত হয়; এবং সেই সাথে ডেভেলেপররাও যেন ত্রুটিপূর্ণ প্রোগ্রামিং ধরার জন্য কম্পাইলার ও স্ট্যাটিক চেকিং সরঞ্জাম ব্যবহার করে নতুন নীতি তৈরি করতে পারে সেই দিকেও লক্ষ্য রাখা হয়।
  
  সি++ মুল সহায়িকার প্রধান লক্ষ্য হলো দক্ষতার সাথে ধারাবাহিকভাবে সি++ লেখা এবং এর রিসোর্সগুলোকে নিরাপদ রাখা।
  
  ২০১৫ সালে সিপিপিকন(CPPCon) এর উদ্বোধনী মূল নোটে সি++ মূল সহায়িকা ঘোষণা করা হয়।
  
  উপোযোগিতা 
  কম্পাইলার বিক্রেতাদের বৃহত্তর স্বাধীনতা দেওয়ার উদ্দেশ্যে সি++ স্ট্যান্ডার্ড কমিটি  নেম ম্যাংগ্লিং,এক্সসেপশন হ্যান্ডেলিং এবং অন্যান্য নির্দিষ্ট কিছু বৈশিষ্ট্যগুলো বাস্তবায়নে নির্দিষ্ট নির্দেশনা না দেওয়ার সিদ্ধান্ত নেয়। এই সিদ্ধান্তের একটি নেতিবাচক দিক হলো যে বিভিন্ন কম্পাইলার দ্বারা তৈরি অবজেক্ট কোডগুলোর মধ্যে অসঙ্গতি পরীলক্ষিত হবে বলে ধারনা করা হয়।যদিও নির্দিষ্ট মেশিন ও অপারেটিং সিস্টেম এর জন্য কম্পাইলার গুলোকে আদর্শ মানদন্ডে আনার একটা প্রচেষ্টা করা হয়েছিল যা এখন প্রায় পরিত্যক্ত বলে মনে হয়।
  
  সি দ্বারা 
  সি++ কে প্রায়ই সি এর সুপারসেট হিসেবে ধরা হয় যেটা পুরোপুরিভাবে সত্য নয়। বেশির ভাগ সি কোড  সি++ এ কম্পাইল করতে পারলেও কিছু সংখ্যক ভিন্নতার কারণে কিছু কিছু কার্যকর সি কোড সি++ এ অকার্যকর হিসেবে দেখায়। উদাহরণস্বরূপ, সি *void থেকে অন্য পয়েন্টার টাইপ এর মধ্যকার অন্তর্নিহিত রুপারন্তর সমর্থন করলেও সি++ সেটা করে না।এছাড়াও সি++ নতুন নতুন কিওয়ার্ড সঙ্গায়িত করতে পারে যেমন newএবং classযেখানে সি প্রোগ্রামে এগুলোকে আইডেনটিফায়ার(উদাহরণস্বরুপ ‘ভ্যারিয়েবল এর নাম’) হিসেবে ব্যবহার করা হয়।
  
  ১৯৯৯ সালে সি স্ট্যান্ডার্ড রিভিশন (C99) দ্বারা কিছু কিছু অসংগতি অপসারিত হয় যেটা বর্তমানে সি++ এর বৈশিষ্ট্য যেমন লাইন কমেন্টস (/ /) এবং মিশ্রিত কোড এর ডিকলেরেশন সমর্থন করে।অপরদিকে C99 এমন কিছু বৈশিষ্ট্য তুলে ধরে যেগুলো সি++ আগে সমর্থন করত না।
  
  সি এবং সি++ কোড একত্রে মিশাতে, যেসকল ফাংশন ডিক্লেয়ার বা সঙ্গায়িত করতে হবে সেটা অবশ্যই সি ও সি++ ২ টাতেই ব্যবহার করতে হবে। এই ফাংশনগুলো ডিক্লেয়ার করতে অবশ্যই সি লিংকেজ ব্যবহার করতে হবে যেখানে এই লিংকেজকে আলাদা বাড়তি extern "C" {/*...*/}  ব্লকের সাথে প্রতিস্থাপন করতে হবে।
  
  তথ্যসূত্র
  
  বহিঃসংযোগ 
   
  
   JTC1/SC22/WG21 – The ISO/IEC C++ Standard Working Group
   n3242.pdf – Final Committee Draft of "ISO/IEC IS 14882 – Programming Languages – C++" (২৮ ফেব্রুয়ারি ২০১১)
   A paper by Stroustrup showing the timeline of C++ evolution (১৯৭৯-১৯৯১)
   Bjarne Stroustrup's C++ Style and Technique FAQ
   C++ FAQ Lite by Marshall Cline
   C++ FQA Lite – Yossi Kreinin
    Interview with Bjarne Stroustrup.
   
   
   Code practices for not breaking binary compatibility between releases of C++ libraries (from KDE Techbase)
   The Standard C++ Foundation is a non-profit organization that promotes the use and understanding of standard C++. Bjarne Stroustrup is a director of the organization.
  
  বিষয়শ্রেণী:প্রোগ্রামিং ভাষা
  বিষয়শ্রেণী:বস্তু-সংশ্লিষ্ট প্রোগ্রামিং ভাষা
title: সি++