নতুনদের জন্য কীভাবে সি++ শিখবেন

Natunadera Jan Ya Kibhabe Si Sikhabena



C++ হল বহুল এবং সর্বাধিক ব্যবহৃত প্রোগ্রামিং ভাষা। এই ভাষাটি প্রাথমিকভাবে বিকশিত সি ভাষার উন্নতি হিসাবে প্রতিষ্ঠিত হয়েছিল এবং সি ভাষার দ্বারা প্রভাবিত হয়েছিল, তাই এটি সি প্রোগ্রামিং ভাষার একটি সুপারসেট যা অন্যান্য সরঞ্জাম এবং লাইব্রেরির সাথে কাজ করে যা অ্যাক্সেসযোগ্য ছিল এবং সি ভাষায় ব্যবহৃত হয়েছিল। . এটি একটি সংকলিত ভাষা যেটিও অপ্রতিরোধ্য।

C++ ভাষার সূচনা ঘটে 1983 সালে, এর পরেই 'বজারে স্ট্রাস্ট্রুপ' অপারেটর ওভারলোডিং এর মত কিছু অতিরিক্ত বৈশিষ্ট্য সহ সি ল্যাঙ্গুয়েজে ক্লাসের সাথে কাজ করে। ব্যবহৃত ফাইল এক্সটেনশনগুলি হল '.c' এবং '.cpp'। C++ এক্সটেনসিবল এবং প্ল্যাটফর্মের উপর নির্ভরশীল নয় এবং এতে STL অন্তর্ভুক্ত যা স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরির সংক্ষিপ্ত রূপ। তাই, মূলত পরিচিত C++ ভাষা আসলে একটি কম্পাইল করা ভাষা হিসেবে পরিচিত যেটির সোর্স ফাইলকে একত্রে কম্পাইল করে অবজেক্ট ফাইল তৈরি করা হয়, যেটি লিঙ্কারের সাথে মিলিত হলে একটি রানেবল প্রোগ্রাম তৈরি করে।

অন্যদিকে, যদি আমরা এর স্তর সম্পর্কে কথা বলি, এটি মধ্যম স্তরের যা ড্রাইভার বা কার্নেলের মতো নিম্ন-স্তরের প্রোগ্রামিং এবং গেমস, জিইউআই বা ডেস্কটপ অ্যাপের মতো উচ্চ-স্তরের অ্যাপগুলির সুবিধা ব্যাখ্যা করে। কিন্তু সিনট্যাক্স C এবং C++ উভয়ের জন্যই প্রায় একই।







C++ ভাষার উপাদান:

#অন্তর্ভুক্ত করুন



এই কমান্ডটি 'cout' কমান্ড সমন্বিত একটি হেডার ফাইল। ব্যবহারকারীর চাহিদা এবং পছন্দের উপর নির্ভর করে একাধিক হেডার ফাইল থাকতে পারে।



int main()





এই স্টেটমেন্টটি হল মাস্টার প্রোগ্রাম ফাংশন যা প্রতিটি C++ প্রোগ্রামের জন্য একটি পূর্বশর্ত, যার মানে এই বিবৃতি ছাড়া কেউ কোনো C++ প্রোগ্রাম চালাতে পারে না। এখানে 'int' হল রিটার্ন ভেরিয়েবল ডেটা টাইপ যা ফাংশনটি যে ধরনের ডেটা রিটার্ন করছে সে সম্পর্কে বলে।

ঘোষণা:



ভেরিয়েবল ঘোষণা করা হয় এবং তাদের জন্য নাম বরাদ্দ করা হয়।

সমস্যা বিবৃতি:

এটি একটি প্রোগ্রামে অপরিহার্য এবং এটি একটি 'যখন' লুপ, 'ফর' লুপ বা অন্য কোনো শর্ত প্রযোজ্য হতে পারে।

অপারেটর:

অপারেটরগুলি C++ প্রোগ্রামগুলিতে ব্যবহৃত হয় এবং কিছু গুরুত্বপূর্ণ কারণ সেগুলি শর্তগুলিতে প্রয়োগ করা হয়। কয়েকটি গুরুত্বপূর্ণ অপারেটর হল &&, ||, !, &, !=, |, &=, |=, ^, ^=।

C++ ইনপুট আউটপুট:

এখন, আমরা C++ এ ইনপুট এবং আউটপুট ক্ষমতা নিয়ে আলোচনা করব। C++-এ ব্যবহৃত সমস্ত স্ট্যান্ডার্ড লাইব্রেরি সর্বাধিক ইনপুট এবং আউটপুট ক্ষমতা প্রদান করে যা বাইটের ক্রম আকারে সঞ্চালিত হয় বা সাধারণত স্ট্রিমগুলির সাথে সম্পর্কিত।

ইনপুট স্ট্রিম:

যদি বাইটগুলি ডিভাইস থেকে মূল মেমরিতে স্ট্রিম করা হয় তবে এটি ইনপুট স্ট্রিম।

আউটপুট স্ট্রীম:

যদি বাইটগুলি বিপরীত দিকে প্রবাহিত হয় তবে এটি আউটপুট স্ট্রিম।

একটি হেডার ফাইল C++ এ ইনপুট এবং আউটপুট সহজতর করার জন্য ব্যবহার করা হয়। এটি হিসাবে লেখা হয় যা স্টু এবং সেট নির্ভুলতার উদাহরণের জন্য পদ্ধতি সরবরাহ করে। ইনপুট এবং আউটপুট কমান্ডগুলি হল cin, cout, cerr এবং clog। এখানে, 'cin' স্ট্যান্ডার্ড ইনপুটকে নির্দেশ করে এবং 'cout' স্ক্রিনে বিবৃতি প্রদর্শনের জন্য স্ট্রীম সন্নিবেশ অপারেটর (<<) এর সাথে ব্যবহৃত স্ট্যান্ডার্ড আউটপুট ডিভাইসকে নির্দেশ করে।

উদাহরণ:

আমরা একটি অক্ষর টাইপ স্ট্রিং ব্যবহার করে একটি স্ট্রিং বার্তা প্রদর্শন করা হবে.

প্রথম লাইনে, আমরা 'iostream' অন্তর্ভুক্ত করছি যেটিতে প্রায় সমস্ত প্রয়োজনীয় লাইব্রেরি রয়েছে যা আমাদের একটি C++ প্রোগ্রাম সম্পাদনের জন্য প্রয়োজন হতে পারে। পরের লাইনে, আমরা একটি নামস্থান ঘোষণা করছি যা শনাক্তকারীদের জন্য সুযোগ প্রদান করে। প্রধান ফাংশন কল করার পরে, আমরা একটি ক্যারেক্টার টাইপ অ্যারে শুরু করছি যা স্ট্রিং বার্তা সংরক্ষণ করে এবং 'cout' এটিকে সংযুক্ত করে প্রদর্শন করে। আমরা স্ক্রিনে পাঠ্য প্রদর্শনের জন্য 'cout' ব্যবহার করছি। এছাড়াও, আমরা অক্ষরের একটি স্ট্রিং সংরক্ষণ করার জন্য একটি অক্ষর ডেটা টাইপ অ্যারে সহ একটি ভেরিয়েবল 'A' নিয়েছি এবং তারপরে আমরা 'cout' কমান্ড ব্যবহার করে স্ট্যাটিক বার্তার সাথে উভয় অ্যারে বার্তা যুক্ত করেছি।

উত্পন্ন আউটপুট নীচে দেখানো হয়েছে:

উদাহরণ:

এই ক্ষেত্রে, আমরা একটি সাধারণ স্ট্রিং বার্তায় ব্যবহারকারীর বয়স উপস্থাপন করব।

প্রথম ধাপে আমরা লাইব্রেরি অন্তর্ভুক্ত করছি। এর পরে, আমরা একটি নামস্থান ব্যবহার করছি যা শনাক্তকারীদের জন্য সুযোগ প্রদান করবে। পরবর্তী ধাপে, আমরা কল করছি প্রধান() ফাংশন এর পরে, আমরা একটি 'int' পরিবর্তনশীল হিসাবে বয়স শুরু করছি। আমরা ইনপুটের জন্য 'cin' কমান্ড এবং সাধারণ স্ট্রিং বার্তার আউটপুটের জন্য 'cout' কমান্ড ব্যবহার করছি। 'cin' ব্যবহারকারীর কাছ থেকে বয়সের মান ইনপুট করে এবং 'cout' এটি অন্যান্য স্ট্যাটিক বার্তায় প্রদর্শন করে।

এই বার্তাটি প্রোগ্রামটি চালানোর পরে স্ক্রিনে দেখানো হয় যাতে ব্যবহারকারী বয়স পেতে পারে এবং তারপরে ENTER টিপুন।

উদাহরণ:

এখানে, আমরা দেখাই কিভাবে 'cout' ব্যবহার করে একটি স্ট্রিং প্রিন্ট করা যায়।

একটি স্ট্রিং প্রিন্ট করতে, আমরা প্রাথমিকভাবে একটি লাইব্রেরি এবং তারপর শনাক্তকারীদের জন্য নামস্থান অন্তর্ভুক্ত করি। দ্য প্রধান() ফাংশন বলা হয়। আরও, আমরা সন্নিবেশ অপারেটরের সাথে 'cout' কমান্ড ব্যবহার করে একটি স্ট্রিং আউটপুট প্রিন্ট করছি যা তারপর স্ক্রিনে স্ট্যাটিক বার্তা প্রদর্শন করছে।

C++ ডেটা প্রকার:

C++ এ ডেটা টাইপ একটি অত্যন্ত গুরুত্বপূর্ণ এবং বহুল পরিচিত বিষয় কারণ এটি C++ প্রোগ্রামিং ভাষার ভিত্তি। একইভাবে, ব্যবহৃত যেকোনো ভেরিয়েবল অবশ্যই একটি নির্দিষ্ট বা চিহ্নিত ডেটা টাইপের হতে হবে।

আমরা জানি যে সমস্ত ভেরিয়েবলের জন্য, আমরা ডেটা টাইপ ব্যবহার করি ঘোষণা করার সময় ডেটা টাইপ সীমিত করতে যা পুনরুদ্ধার করা দরকার। অথবা, আমরা বলতে পারি যে ডেটা টাইপগুলি সর্বদা একটি ভেরিয়েবলকে বলে যে এটি যে ধরণের ডেটা সংরক্ষণ করছে। প্রতিবার যখন আমরা একটি পরিবর্তনশীল সংজ্ঞায়িত করি, কম্পাইলার ঘোষিত ডেটা টাইপের উপর ভিত্তি করে মেমরি বরাদ্দ করে কারণ প্রতিটি ডেটা টাইপের মেমরি স্টোরেজ ক্ষমতা আলাদা থাকে।

C++ ভাষা ডেটা প্রকারের বৈচিত্র্যকে সহায়তা করছে যাতে প্রোগ্রামার তার প্রয়োজন হতে পারে এমন উপযুক্ত ডেটা টাইপ নির্বাচন করতে পারে।

C++ নিচে উল্লিখিত ডেটা টাইপের ব্যবহার সহজতর করে:

  1. ব্যবহারকারী-সংজ্ঞায়িত ডেটা প্রকার
  2. প্রাপ্ত তথ্য প্রকার
  3. অন্তর্নির্মিত ডেটা প্রকার

উদাহরণস্বরূপ, কয়েকটি সাধারণ ডেটা টাইপ শুরু করে ডেটা প্রকারের গুরুত্ব বোঝাতে নিম্নলিখিত লাইনগুলি দেওয়া হয়েছে:

int = দুই ; // পূর্ণসংখ্যা মান

ভাসা F_N = 3.66 ; // ভাসমান-বিন্দু মান

দ্বিগুণ D_N = ৮.৮৭ ; // ডবল ফ্লোটিং-পয়েন্ট মান

চর আলফা = 'পি' ; // চরিত্র

bool খ = সত্য ; // বুলিয়ান

কয়েকটি সাধারণ ডেটা প্রকার: তারা কী আকার নির্দিষ্ট করে এবং তাদের ভেরিয়েবলগুলি কী ধরণের তথ্য সংরক্ষণ করবে তা নীচে দেখানো হয়েছে:

  • Char: এক বাইটের আকারের সাথে, এটি একটি একক অক্ষর, অক্ষর, সংখ্যা বা ASCII মান সংরক্ষণ করবে।
  • বুলিয়ান: 1 বাইটের আকারের সাথে, এটি সত্য বা মিথ্যা হিসাবে মান সংরক্ষণ করবে এবং ফেরত দেবে।
  • int: 2 বা 4 বাইটের আকার সহ, এটি দশমিক ছাড়া পূর্ণ সংখ্যা সংরক্ষণ করবে।
  • ফ্লোটিং পয়েন্ট: 4 বাইটের আকারের সাথে, এটি ভগ্নাংশ সংখ্যা সংরক্ষণ করবে যার এক বা একাধিক দশমিক আছে। এটি 7 দশমিক সংখ্যা পর্যন্ত সঞ্চয় করার জন্য যথেষ্ট।
  • ডাবল ফ্লোটিং পয়েন্ট: 8 বাইটের আকারের সাথে, এটি এক বা একাধিক দশমিক আছে এমন ভগ্নাংশ সংখ্যাও সংরক্ষণ করবে। এটি 15 দশমিক সংখ্যা পর্যন্ত সঞ্চয় করার জন্য যথেষ্ট।
  • অকার্যকর: কোন নির্দিষ্ট আকার ছাড়া একটি শূন্যতা মূল্যহীন কিছু ধারণ করে। অতএব, এটি এমন ফাংশনগুলির জন্য ব্যবহৃত হয় যা একটি শূন্য মান প্রদান করে।
  • ওয়াইড ক্যারেক্টার: 8-বিটের চেয়ে বড় আকারের সাথে যা সাধারণত 2 বা 4 বাইট লম্বা হয় wchar_t দ্বারা প্রতিনিধিত্ব করা হয় যা char এর মতো এবং এইভাবে একটি অক্ষরের মানও সংরক্ষণ করে।

প্রোগ্রাম বা কম্পাইলারের ব্যবহারের উপর নির্ভর করে উপরে উল্লিখিত ভেরিয়েবলের আকার ভিন্ন হতে পারে।

উদাহরণ:

আসুন শুধুমাত্র C++ এ একটি সাধারণ কোড লিখি যা উপরে বর্ণিত কয়েকটি ডেটা প্রকারের সঠিক মাপ দেবে:

এই কোডে, আমরা লাইব্রেরি সংহত করছি। এর পরে, আমরা 'নেমস্পেস' ব্যবহার করছি। পরের লাইনে, আমরা কল করছি প্রধান() ফাংশন যেখানে আমরা একটি 'cout' কমান্ড ব্যবহার করছি যা প্রোগ্রামে নির্দিষ্ট করা সমস্ত ডেটা প্রকারের আকার প্রিন্ট করবে। ভেরিয়েবলের আকার খুঁজে পেতে, আমাদের প্রয়োগ করতে হবে আকার() পদ্ধতি

চিত্রে দেখানো হিসাবে আউটপুট বাইটে প্রাপ্ত হয়:

উদাহরণ:

এখানে আমরা দুটি ভিন্ন ডেটা টাইপের আকার যোগ করব।

প্রথমত, আমরা শনাক্তকারীদের জন্য একটি 'স্ট্যান্ডার্ড নেমস্পেস' ব্যবহার করে একটি হেডার ফাইল অন্তর্ভুক্ত করছি। পরবর্তী, প্রধান() ফাংশন বলা হয় যেখানে আমরা প্রথমে 'int' ভেরিয়েবল শুরু করছি এবং তারপর এই দুটির আকারের মধ্যে পার্থক্য পরীক্ষা করার জন্য একটি 'ডবল' ভেরিয়েবল। তারপর, তাদের মাপ ব্যবহার দ্বারা একত্রিত হয় আকার() ফাংশন আউটপুট 'cout' বিবৃতি দ্বারা প্রদর্শিত হয়।

আরও একটি শব্দ আছে যা এখানে উল্লেখ করতে হবে এবং তা হল 'ডেটা মডিফায়ার' . নামটি পরামর্শ দেয় যে 'ডেটা মডিফায়ার'গুলি অন্তর্নির্মিত ডেটা প্রকারগুলির সাথে তাদের দৈর্ঘ্য সংশোধন করতে ব্যবহৃত হয় যা একটি নির্দিষ্ট ডেটা টাইপ কম্পাইলারের প্রয়োজন বা প্রয়োজনীয়তা দ্বারা বজায় রাখতে পারে।

নিম্নলিখিত ডেটা মডিফায়ারগুলি যা C++ এ অ্যাক্সেসযোগ্য:

  1. স্বাক্ষরিত
  2. স্বাক্ষরবিহীন
  3. দীর্ঘ
  4. সংক্ষিপ্ত

সংশোধিত আকার এবং অন্তর্নির্মিত ডেটা প্রকারগুলির উপযুক্ত পরিসর নীচে উল্লেখ করা হয়েছে যখন সেগুলি ডেটা টাইপ মডিফায়ারগুলির সাথে একত্রিত করা হয়:

  • সংক্ষিপ্ত int: 2 বাইটের আকার থাকা, -32,768 থেকে 32,767 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • স্বাক্ষরবিহীন সংক্ষিপ্ত int: 2 বাইটের আকার, 0 থেকে 65,535 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • স্বাক্ষরবিহীন int: 4 বাইটের আকারের, 0 থেকে 4,294,967,295 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • int: 4 বাইটের মাপ থাকা, -2,147,483,648 থেকে 2,147,483,647 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • লং int: 4 বাইটের আকার থাকা, -2,147,483,648 থেকে 2,147,483,647 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • স্বাক্ষরবিহীন দীর্ঘ int: 4 বাইটের আকার থাকা, 0 থেকে 4,294,967.295 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • লং লং int: 8 বাইটের মাপ থাকার ফলে –(2^63) থেকে (2^63)-1 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • স্বাক্ষরবিহীন লম্বা লম্বা int: 8 বাইটের আকার থাকা, 0 থেকে 18,446,744,073,709,551,615 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • স্বাক্ষরিত অক্ষর: 1 বাইট আকারের, -128 থেকে 127 পর্যন্ত পরিবর্তনের পরিসর রয়েছে
  • স্বাক্ষরবিহীন চর: 1 বাইটের আকারের, 0 থেকে 255 পর্যন্ত পরিবর্তনের পরিসর রয়েছে।

C++ গণনা:

C++ প্রোগ্রামিং ভাষায় 'গণনা' হল একটি ব্যবহারকারী-সংজ্ঞায়িত ডেটাটাইপ। গণনা একটি ' হিসাবে ঘোষণা করা হয় enum' C++ এ। এটি প্রোগ্রামে ব্যবহৃত যেকোনো ধ্রুবককে নির্দিষ্ট নাম বরাদ্দ করতে ব্যবহৃত হয়। এটি প্রোগ্রামের পঠনযোগ্যতা এবং ব্যবহারযোগ্যতা উন্নত করে।

বাক্য গঠন:

আমরা নিম্নলিখিত হিসাবে C++ এ গণনা ঘোষণা করি:

enum enum_Name { ধ্রুবক1 , ধ্রুবক2 , ধ্রুবক3… }

C++ এ গণনার সুবিধা:

Enum নিম্নলিখিত উপায়ে ব্যবহার করা যেতে পারে:

  • এটি স্যুইচ কেস স্টেটমেন্টে ঘন ঘন ব্যবহার করা যেতে পারে।
  • এটি কনস্ট্রাক্টর, ক্ষেত্র এবং পদ্ধতি ব্যবহার করতে পারে।
  • এটি শুধুমাত্র 'এনাম' শ্রেণীকে প্রসারিত করতে পারে, অন্য কোনো শ্রেণী নয়।
  • এটা কম্পাইল সময় বৃদ্ধি করতে পারে.
  • এটা অতিক্রম করা যেতে পারে.

C++ এ গণনার অসুবিধা:

Enum এর কিছু অসুবিধাও আছে:

যদি একবার একটি নাম গণনা করা হয় তবে এটি একই সুযোগে আবার ব্যবহার করা যাবে না।

উদাহরণ স্বরূপ:

enum দিন

{ শনি , সূর্য , আমার } ;

int শনি = 8 ; // এই লাইনে ত্রুটি আছে

Enum ফরওয়ার্ড ঘোষণা করা যাবে না.

উদাহরণ স্বরূপ:

enum আকার ;

শ্রেণীর রঙ

{

অকার্যকর আঁকা ( আকার aShape ) ; // আকার ঘোষণা করা হয়নি

} ;

তারা নামের মত দেখতে কিন্তু তারা পূর্ণসংখ্যা. সুতরাং, তারা স্বয়ংক্রিয়ভাবে অন্য কোনো ডেটাটাইপে রূপান্তর করতে পারে।

উদাহরণ স্বরূপ:

enum আকার

{

ত্রিভুজ , বৃত্ত , বর্গক্ষেত্র

} ;

int রঙ = নীল ;

রঙ = বর্গক্ষেত্র ;

উদাহরণ:

এই উদাহরণে, আমরা C++ গণনার ব্যবহার দেখতে পাচ্ছি:

এই কোড এক্সিকিউশনে, প্রথমত, আমরা #include দিয়ে শুরু করি। C++ এর সমৃদ্ধ লাইব্রেরিগুলির মধ্যে একটি। এটি একটি অন্তর্নির্মিত লাইব্রেরি। এতে ইনপুট এবং আউটপুট ডেটা স্ট্রিম জড়িত . এর পরে, আমরা স্ট্যান্ডার্ড নেমস্পেস ব্যবহার করি। তারপরে, আমরা 'এনাম' একটি নির্দিষ্ট নাম বিষয় হিসাবে ঘোষণা করেছি এবং গণিত, ইংরেজি এবং উর্দু তিনটি বিষয় বরাদ্দ করেছি। গণিত মান নির্ধারণ করা হয়েছে 1। আমাদের লক্ষ্য হল enum-এ ঘোষিত বিষয়ের মান প্রিন্ট করা। তারপর, আমরা আহ্বান প্রধান() ফাংশন ভিতরে প্রধান() আমাদের আছে cout<<, যেখানে 'c' মানে 'অক্ষর' এবং out মানে 'আউটপুট'। আউটপুট প্রদর্শনের জন্য 'Cout' ব্যবহার করা হয় . << সন্নিবেশ অপারেটর নির্দেশ করে। 'cout<<' ব্যবহার করে, আমরা enum মান প্রিন্ট করি। এর পরে, আমরা 'রিটার্ন 0' কমান্ডটি ব্যবহার করব। এই কমান্ডটি ফলাফল প্রদান করে যা মান আকারে রয়েছে।

এখানে আমাদের সম্পাদিত প্রোগ্রামের ফলাফল:

সুতরাং, আপনি দেখতে পাচ্ছেন যে আমাদের কাছে বিষয়ের মান রয়েছে: গণিত, উর্দু, ইংরেজি; অর্থাৎ ১,২,৩।

উদাহরণ:

এখানে আরেকটি উদাহরণ যার মাধ্যমে আমরা enum সম্পর্কে আমাদের ধারণা পরিষ্কার করি:

এই প্রোগ্রামে, আমরা হেডার ফাইল সংহত করে শুরু করি। এটি একটি অন্তর্নির্মিত লাইব্রেরি। এতে ইনপুট এবং আউটপুট ডেটা স্ট্রিম জড়িত। এর পরে, আমাদের স্ট্যান্ডার্ড নেমস্পেস ব্যবহার করতে হবে। তারপর, আমরা প্লেয়ারগুলি ধ্রুবকগুলির জন্য enum মান নির্ধারণ করি। আমাদের টার্গেট কার উপর এটা প্রদর্শন করা. পরবর্তী, আমরা আমাদের কল প্রধান() ফাংশন মধ্যে প্রধান() ফাংশন আমরা দুটি ধ্রুবক বরাদ্দ করেছি: শাদাব, যার মান 'বোলার1' এনাম ভেরিয়েবলের 20; এবং আফ্রিদি, যার মান enum ভেরিয়েবল 'বোলার2' এর কাছে 25।

আমাদের একটি if-else স্টেটমেন্ট ব্যবহার করতে হবে . আমরা 'if' স্টেটমেন্টের ভিতরে তুলনা অপারেটরও ব্যবহার করেছি যার মানে হল আমরা তুলনা করছি যদি 'bowler2' 'bowler1' এর থেকে বড় হয়। তারপর, 'যদি' ব্লক কার্যকর হয় যার অর্থ এটি আফ্রিদির ওভার। তারপর, আমরা আউটপুট প্রদর্শন করতে 'cout<<' এ প্রবেশ করি। প্রথমত, আমরা 'এটি শেষ হয়েছে' বিবৃতিটি মুদ্রণ করি। তারপর, 'বোলার2' এর মান। যদি না হয়, অন্য ব্লকটি আহ্বান করা হয়, যার মানে এটি শাদাবের ওভার। তারপর, 'cout<<' কমান্ড প্রয়োগ করে আমরা 'এটি শেষ হয়েছে' বিবৃতিটি প্রদর্শন করি। তারপর, 'বোলার1' এর মান।

If-else বিবৃতি অনুযায়ী, আমাদের কাছে 25 এর বেশি যা আফ্রিদির মান। এর মানে হল যে enum ভেরিয়েবল 'bowler2'-এর মান 'bowler1'-এর থেকে বেশি তাই 'if' স্টেটমেন্টটি কার্যকর করা হয়।

C++ অন্যথা হলে, স্যুইচ করুন:

C++ প্রোগ্রামিং ল্যাঙ্গুয়েজে, আমরা প্রোগ্রামের প্রবাহ পরিবর্তন করতে 'if statement' এবং 'switch statement' ব্যবহার করি। এই বিবৃতিগুলি যথাক্রমে উল্লিখিত বিবৃতিগুলির প্রকৃত মূল্যের উপর নির্ভর করে প্রোগ্রাম বাস্তবায়নের জন্য একাধিক সেট কমান্ড প্রদানের জন্য ব্যবহার করা হয়। বেশিরভাগ ক্ষেত্রে, আমরা 'if' স্টেটমেন্টের বিকল্প হিসেবে অপারেটর ব্যবহার করি। উপরে উল্লিখিত এই সমস্ত বিবৃতি হল নির্বাচন বিবৃতি যা সিদ্ধান্তমূলক বা শর্তসাপেক্ষ বিবৃতি হিসাবে পরিচিত।

'যদি' বিবৃতি:

এই বিবৃতিটি একটি প্রদত্ত শর্ত পরীক্ষা করার জন্য ব্যবহৃত হয় যখনই আপনি কোনো প্রোগ্রামের প্রবাহ পরিবর্তন করতে চান। এখানে, যদি একটি শর্ত সত্য হয় তবে প্রোগ্রামটি লিখিত নির্দেশাবলী চালাবে কিন্তু শর্তটি মিথ্যা হলে, এটি বন্ধ হয়ে যাবে। একটি উদাহরণ বিবেচনা করা যাক;

এটি ব্যবহার করা সহজ 'if' স্টেটমেন্ট, যেখানে আমরা একটি 'int' ভেরিয়েবলকে 10 হিসাবে শুরু করছি। তারপর, ব্যবহারকারীর কাছ থেকে একটি মান নেওয়া হয় এবং এটি 'if' স্টেটমেন্টে ক্রস-চেক করা হয়। যদি এটি 'if' বিবৃতিতে প্রয়োগ করা শর্তগুলিকে সন্তুষ্ট করে, তাহলে আউটপুট প্রদর্শিত হবে।

হিসাবে নির্বাচিত সংখ্যা ছিল 40, আউটপুট হল বার্তা।

'যদি-অন্যথা' বিবৃতি:

একটি আরও জটিল প্রোগ্রামে যেখানে 'if' বিবৃতিটি সাধারণত সহযোগিতা করে না, আমরা 'if-else' বিবৃতি ব্যবহার করি। প্রদত্ত ক্ষেত্রে, প্রযোজ্য শর্তগুলি পরীক্ষা করতে আমরা 'if- else' বিবৃতি ব্যবহার করছি।

প্রথমে, আমরা 'x' নামের ডেটাটাইপ 'int'-এর একটি ভেরিয়েবল ঘোষণা করব যার মান ব্যবহারকারীর কাছ থেকে নেওয়া হয়েছে। এখন, 'if' বিবৃতিটি ব্যবহার করা হয়েছে যেখানে আমরা একটি শর্ত প্রয়োগ করেছি যে যদি ব্যবহারকারীর দ্বারা প্রবেশ করা পূর্ণসংখ্যার মান 2 হয়। আউটপুটটি পছন্দসই হবে এবং একটি সাধারণ 'NICE TRY' বার্তা প্রদর্শিত হবে। অন্যথায়, প্রবেশ করা নম্বরটি 2 না হলে, আউটপুট ভিন্ন হবে।

ব্যবহারকারী যখন 2 নম্বর লেখেন, তখন নিম্নলিখিত আউটপুটটি দেখানো হয়।

যখন ব্যবহারকারী 2 ব্যতীত অন্য কোন সংখ্যা লেখে, তখন আমরা যে আউটপুটটি পাই তা হল:

If-else-if বিবৃতি:

নেস্টেড if-else-if স্টেটমেন্টগুলি বেশ জটিল এবং একই কোডে একাধিক শর্ত প্রয়োগ করা হলে ব্যবহার করা হয়। আসুন আরেকটি উদাহরণ ব্যবহার করে এটি নিয়ে চিন্তা করি:

এখানে, হেডার ফাইল এবং নেমস্পেসকে একীভূত করার পর, আমরা 200 হিসাবে ভেরিয়েবল 'm'-এর একটি মান শুরু করেছি। তারপর 'm'-এর মান ব্যবহারকারীর কাছ থেকে নেওয়া হয় এবং তারপর প্রোগ্রামে বর্ণিত একাধিক শর্তের সাথে ক্রস-চেক করা হয়।

এখানে, ব্যবহারকারী 195 মান বেছে নিয়েছে। এই কারণেই আউটপুট দেখায় যে এটি 'm' এর প্রকৃত মান।

বিবৃতি পরিবর্তন করুন:

একটি 'সুইচ' বিবৃতি একটি ভেরিয়েবলের জন্য C++ এ ব্যবহৃত হয় যা একাধিক মানের তালিকার সমান হলে পরীক্ষা করা প্রয়োজন। 'সুইচ' বিবৃতিতে, আমরা স্বতন্ত্র কেস আকারে শর্তগুলি সনাক্ত করি এবং প্রতিটি কেস স্টেটমেন্টের শেষে সমস্ত ক্ষেত্রে একটি বিরতি অন্তর্ভুক্ত থাকে। একাধিক ক্ষেত্রে উপযুক্ত শর্ত এবং বিবৃতি প্রয়োগ করা হয় ব্রেক স্টেটমেন্ট সহ যেগুলি সুইচ স্টেটমেন্টকে বন্ধ করে দেয় এবং কোনো শর্ত সমর্থিত না হলে একটি ডিফল্ট স্টেটমেন্টে চলে যায়।

কীওয়ার্ড 'ব্রেক':

সুইচ স্টেটমেন্টে 'ব্রেক' কীওয়ার্ড রয়েছে। এটি পরবর্তী ক্ষেত্রে কোডটি কার্যকর করা থেকে বিরত করে। সুইচ স্টেটমেন্টের এক্সিকিউশন শেষ হয় যখন C++ কম্পাইলার 'ব্রেক' কীওয়ার্ড জুড়ে আসে এবং কন্ট্রোল সেই লাইনে চলে যায় যা সুইচ স্টেটমেন্ট অনুসরণ করে। একটি সুইচে একটি বিরতি বিবৃতি ব্যবহার করার প্রয়োজন নেই। যদি এটি ব্যবহার না করা হয় তাহলে মৃত্যুদন্ড পরবর্তী ক্ষেত্রে চলে যায়।

ভাগ করা কোডের প্রথম লাইনে, আমরা লাইব্রেরি অন্তর্ভুক্ত করছি। এর পরে, আমরা 'নেমস্পেস' যোগ করছি। আমরা আহ্বান জানাই প্রধান() ফাংশন তারপরে, আমরা একটি অক্ষর ডেটাটাইপ গ্রেডকে 'F' হিসাবে ঘোষণা করছি। এই গ্রেডটি আপনার ইচ্ছা হতে পারে এবং নির্বাচিত ক্ষেত্রে যথাক্রমে ফলাফল দেখানো হবে। আমরা ফলাফল পাওয়ার জন্য সুইচ স্টেটমেন্ট প্রয়োগ করেছি।

যদি আমরা গ্রেড হিসেবে 'F' বেছে নিই, তাহলে আউটপুট হবে 'বেটার লাক নেক্সট টাইম' কারণ এই বিবৃতিটি আমরা প্রিন্ট করতে চাই যদি গ্রেড 'F' হয়।

আসুন X-এ গ্রেড পরিবর্তন করি এবং দেখি কি হয়। আমি গ্রেড হিসাবে 'X' লিখেছি এবং প্রাপ্ত আউটপুট নীচে দেখানো হয়েছে:

সুতরাং, 'সুইচ'-এ অনুপযুক্ত ক্ষেত্রে স্বয়ংক্রিয়ভাবে পয়েন্টারকে সরাসরি ডিফল্ট বিবৃতিতে নিয়ে যায় এবং প্রোগ্রামটি বন্ধ করে দেয়।

if-else এবং switch স্টেটমেন্টের কিছু সাধারণ বৈশিষ্ট্য রয়েছে:

  • এই বিবৃতিগুলি প্রোগ্রামটি কীভাবে কার্যকর করা হয় তা পরিচালনা করতে ব্যবহার করা হয়।
  • তারা উভয়ই একটি শর্ত মূল্যায়ন করে এবং এটি নির্ধারণ করে কিভাবে প্রোগ্রামটি প্রবাহিত হয়।
  • বিভিন্ন প্রতিনিধিত্বমূলক শৈলী থাকা সত্ত্বেও, তারা একই উদ্দেশ্যে ব্যবহার করা যেতে পারে।

if-else এবং switch বিবৃতি নির্দিষ্ট উপায়ে পৃথক হয়:

  • যখন ব্যবহারকারী 'সুইচ' কেস স্টেটমেন্টে মানগুলি সংজ্ঞায়িত করে, যেখানে সীমাবদ্ধতা 'if-else' বিবৃতিতে মান নির্ধারণ করে।
  • কোথায় পরিবর্তন করা দরকার তা নির্ধারণ করতে সময় লাগে, 'যদি-অন্যথা' বিবৃতি সংশোধন করা চ্যালেঞ্জিং। অন্যদিকে, 'সুইচ' বিবৃতিগুলি আপডেট করা সহজ কারণ সেগুলি সহজেই সংশোধন করা যেতে পারে।
  • অনেক অভিব্যক্তি অন্তর্ভুক্ত করতে, আমরা অসংখ্য 'যদি-অন্যথা' বিবৃতি ব্যবহার করতে পারি।

C++ লুপ:

এখন, আমরা আবিষ্কার করব কিভাবে C++ প্রোগ্রামিং-এ লুপ ব্যবহার করতে হয়। একটি 'লুপ' হিসাবে পরিচিত নিয়ন্ত্রণ কাঠামো বিবৃতিগুলির একটি সিরিজ পুনরাবৃত্তি করে। অন্য কথায়, একে পুনরাবৃত্তিমূলক গঠন বলা হয়। সমস্ত বিবৃতি একটি ক্রমিক কাঠামোতে একবারে কার্যকর করা হয় . অন্যদিকে, নির্দিষ্ট বিবৃতির উপর নির্ভর করে, কন্ডিশন স্ট্রাকচার এক্সিকিউট বা এক্সপ্রেশন বাদ দিতে পারে। নির্দিষ্ট পরিস্থিতিতে একাধিকবার একটি বিবৃতি কার্যকর করার প্রয়োজন হতে পারে।

লুপের ধরন:

লুপের তিনটি বিভাগ রয়েছে:

লুপের জন্য:

লুপ এমন কিছু যা একটি চক্রের মতো নিজেকে পুনরাবৃত্তি করে এবং প্রদত্ত শর্তকে যাচাই না করলে থামে। একটি 'ফর' লুপ বহুবার বিবৃতিগুলির একটি ক্রম প্রয়োগ করে এবং কোডটিকে ঘনীভূত করে যা লুপ ভেরিয়েবলের সাথে মানিয়ে নেয়। এটি প্রদর্শন করে যে কীভাবে একটি 'ফর' লুপ একটি নির্দিষ্ট ধরণের পুনরাবৃত্তিমূলক নিয়ন্ত্রণ কাঠামো যা আমাদেরকে একটি লুপ তৈরি করতে দেয় যা নির্দিষ্ট সংখ্যক বার পুনরাবৃত্তি হয়। লুপটি আমাদেরকে একটি সাধারণ লাইনের কোড ব্যবহার করে 'N' সংখ্যক ধাপ চালানোর অনুমতি দেবে। আসুন সিনট্যাক্স সম্পর্কে কথা বলি যা আমরা আপনার সফ্টওয়্যার অ্যাপ্লিকেশনে কার্যকর করার জন্য একটি 'ফর' লুপের জন্য ব্যবহার করব।

'ফর' লুপ এক্সিকিউশনের সিনট্যাক্স:

উদাহরণ:

এখানে, আমরা একটি লুপ ভেরিয়েবল ব্যবহার করি এই লুপটিকে একটি 'ফর' লুপে নিয়ন্ত্রণ করতে। প্রথম ধাপটি এই ভেরিয়েবলের একটি মান নির্ধারণ করা হবে যা আমরা একটি লুপ হিসাবে উল্লেখ করছি। এর পরে, আমাদের অবশ্যই সংজ্ঞায়িত করতে হবে যে এটি কাউন্টার মানের থেকে কম বা বেশি কিনা। এখন, লুপের বডি এক্সিকিউট করতে হবে এবং বিবৃতিটি সত্য হলে লুপ ভেরিয়েবল আপডেট করা হবে। আমরা প্রস্থান অবস্থায় পৌঁছানো পর্যন্ত উপরোক্ত পদক্ষেপগুলি প্রায়শই পুনরাবৃত্তি হয়।

  • প্রারম্ভিক অভিব্যক্তি: প্রথমে, আমাদের এই এক্সপ্রেশনের যেকোনো প্রারম্ভিক মানের সাথে লুপ কাউন্টার সেট করতে হবে।
  • টেস্ট এক্সপ্রেশন : এখন, আমাদের প্রদত্ত অভিব্যক্তিতে প্রদত্ত শর্তটি পরীক্ষা করতে হবে। যদি মানদণ্ড পূরণ করা হয়, আমরা 'ফর' লুপের বডি চালাব এবং এক্সপ্রেশন আপডেট করা চালিয়ে যাব; যদি না হয়, আমাদের থামতে হবে।
  • এক্সপ্রেশন আপডেট করুন: এই এক্সপ্রেশনটি লুপের বডি এক্সিকিউট হওয়ার পর একটি নির্দিষ্ট মান দ্বারা লুপ ভেরিয়েবলকে বৃদ্ধি বা হ্রাস করে।

একটি 'ফর' লুপ যাচাই করতে C++ প্রোগ্রামের উদাহরণ:

উদাহরণ:

এই উদাহরণটি 0 থেকে 10 পর্যন্ত পূর্ণসংখ্যার মানের মুদ্রণ দেখায়।

এই পরিস্থিতিতে, আমাদের 0 থেকে 10 পর্যন্ত পূর্ণসংখ্যাগুলি প্রিন্ট করার কথা। প্রথমে, আমরা একটি র্যান্ডম ভেরিয়েবল i আরম্ভ করেছি যার একটি মান '0' দেওয়া হয়েছে এবং তারপরে আমরা যে কন্ডিশন প্যারামিটারটি আগে থেকেই ব্যবহার করেছি সেটি যদি i<=10 হয় তবে শর্তটি পরীক্ষা করে। এবং যখন এটি শর্তটি সন্তুষ্ট করে এবং এটি সত্য হয়ে যায়, তখন 'ফর' লুপের সম্পাদন শুরু হয়। নির্বাহের পরে, দুটি বৃদ্ধি বা হ্রাস পরামিতির মধ্যে, একটি কার্যকর করা হবে এবং যেখানে নির্দিষ্ট শর্ত i<=10 মিথ্যাতে পরিণত না হওয়া পর্যন্ত, ভেরিয়েবল i-এর মান বাড়ানো হবে।

শর্ত i<10 সহ পুনরাবৃত্তির সংখ্যা:

এর সংখ্যা

পুনরাবৃত্তি

ভেরিয়েবল আমি <10 কর্ম
প্রথম i=0 সত্য 0 প্রদর্শিত হয় এবং i 1 দ্বারা বৃদ্ধি পায়।
দ্বিতীয় i=1 সত্য 1 প্রদর্শিত হয় এবং i 2 দ্বারা বৃদ্ধি পায়।
তৃতীয় i=2 সত্য 2 প্রদর্শিত হয় এবং i 3 দ্বারা বৃদ্ধি পায়।
চতুর্থ i=3 সত্য 3 প্রদর্শিত হয় এবং i 4 দ্বারা বৃদ্ধি পায়।
পঞ্চম i=4 সত্য 4 প্রদর্শিত হয় এবং i 5 দ্বারা বৃদ্ধি পায়।
ষষ্ঠ i=5 সত্য 5 প্রদর্শিত হয় এবং i 6 দ্বারা বৃদ্ধি পায়।
সপ্তম i=6 সত্য 6 প্রদর্শিত হয় এবং i 7 দ্বারা বৃদ্ধি পায়।
অষ্টম i=7 সত্য 7 প্রদর্শিত হয় এবং i 8 দ্বারা বৃদ্ধি পায়
নবম i=8 সত্য 8 প্রদর্শিত হয় এবং i 9 দ্বারা বৃদ্ধি পায়।
দশম i=9 সত্য 9 প্রদর্শিত হয় এবং i 10 দ্বারা বৃদ্ধি পায়।
একাদশ i=10 সত্য 10 প্রদর্শিত হয় এবং i 11 দ্বারা বৃদ্ধি পায়।
দ্বাদশ i=11 মিথ্যা লুপ বন্ধ করা হয়.

উদাহরণ:

নিম্নলিখিত উদাহরণটি পূর্ণসংখ্যার মান প্রদর্শন করে:

উপরের ক্ষেত্রে, 'a' নামের একটি ভেরিয়েবল 50 প্রদত্ত একটি মান দিয়ে শুরু করা হয়। একটি শর্ত প্রয়োগ করা হয় যেখানে 'a' ভেরিয়েবলটি 70-এর কম হয়। তারপর, 'a'-এর মান এমনভাবে আপডেট করা হয় যে এটির সাথে যোগ করা হয় 2. 'a'-এর মান তারপর একটি প্রাথমিক মান থেকে শুরু হয় যা ছিল 50 এবং 2 একই সাথে পুরো লুপ জুড়ে যোগ করা হয় যতক্ষণ না কন্ডিশনটি মিথ্যা প্রত্যাবর্তন করে এবং 'a'-এর মান 70 থেকে বাড়ানো হয় এবং লুপ বন্ধ না হয়।

পুনরাবৃত্তির সংখ্যা:

এর সংখ্যা

পুনরাবৃত্তি

পরিবর্তনশীল a=50 কর্ম
প্রথম a=50 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 50 52 হয়
দ্বিতীয় a=52 সত্য a-এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 52 54 হয়
তৃতীয় a=54 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 54 56 হয়
চতুর্থ a=56 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 56 58 হয়
পঞ্চম a=58 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 58 60 হয়
ষষ্ঠ a=60 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 60 62 হয়
সপ্তম a=62 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 62 64 হয়
অষ্টম a=64 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 64 66 হয়
নবম a=66 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 66 68 হয়
দশম a=68 সত্য a এর মান আরও দুটি পূর্ণসংখ্যা যোগ করে আপডেট করা হয় এবং 68 70 হয়
একাদশ a=70 মিথ্যা লুপ বন্ধ করা হয়

যখন লুপ:

সংজ্ঞায়িত শর্ত সন্তুষ্ট না হওয়া পর্যন্ত, এক বা একাধিক বিবৃতি কার্যকর করা যেতে পারে। যখন পুনরাবৃত্তি আগে থেকে অজানা, এটি খুব দরকারী। প্রথমে, শর্তটি পরীক্ষা করা হয় এবং তারপরে বিবৃতিটি চালানো বা বাস্তবায়ন করতে লুপের বডিতে প্রবেশ করে।

প্রথম লাইনে, আমরা হেডার ফাইল এবং স্ট্যান্ডার্ড নেমস্পেস অন্তর্ভুক্ত করি। আমরা কল প্রধান() ফাংশন এখানে, আমরা একটি পরিবর্তনশীল 'a' শুরু করি। পরবর্তী লাইনে, আমরা while শর্তটি প্রয়োগ করি। while কন্ডিশনের মধ্যে, আমরা লেখা মান প্রদর্শন করতে 'cout' স্টেটমেন্ট ব্যবহার করি। তারপর, আমরা গণনা বাড়ানোর জন্য ইনক্রিমেন্ট অপারেটর ব্যবহার করি। শেষ লাইনে, আমরা প্রোগ্রামটি শেষ করতে 'রিটার্ন 0' বিবৃতিটি ব্যবহার করি।

ডু-হাইল লুপ:

সংজ্ঞায়িত শর্ত সন্তুষ্ট হলে, বিবৃতি একটি সিরিজ বাহিত হয়. প্রথমত, লুপের শরীর সঞ্চালিত হয়। এর পরে, শর্তটি সত্য কিনা তা পরীক্ষা করা হয়। অতএব, বিবৃতি একবার কার্যকর করা হয়। অবস্থার মূল্যায়ন করার আগে লুপের বডি একটি 'ডু-হোয়াইল' লুপে প্রক্রিয়া করা হয়। প্রয়োজনীয় শর্ত সন্তুষ্ট হলেই প্রোগ্রামটি চলে। অন্যথায়, শর্তটি মিথ্যা হলে, প্রোগ্রামটি বন্ধ হয়ে যায়।

এখানে, আমরা হেডার ফাইল সংহত করি। আমরা ব্যবহার করি প্রধান() প্রোগ্রামে ফাংশন। তারপর, আমরা চারটি পূর্ণসংখ্যা শুরু করি এবং 'cin' বিবৃতি ব্যবহার করি, যাতে ব্যবহারকারী মানটি প্রবেশ করতে পারে। পরের লাইনে, আমরা দুটি ভিন্ন পূর্ণসংখ্যা শুরু করি। আমরা 'করুন' বিবৃতি প্রয়োগ করি। বিবৃতির ভিতরে, আমরা দুটি গাণিতিক ফাংশন ব্যবহার করি। প্রথমত, আমরা গুন অপারেটর ব্যবহার করি এবং দ্বিতীয়ত, আমরা যোগ অপারেটর ব্যবহার করি। তারপরে, আমরা 'do' স্টেটমেন্টের বাইরে প্রোগ্রামে 'while' শর্তটি প্রয়োগ করি। আরও, আমরা 'ফলাফল' পূর্ণসংখ্যার মাধ্যমে ফলাফল প্রিন্ট করতে 'cout' বিবৃতি যোগ করি। শেষ লাইনে, প্রোগ্রামটি বন্ধ করতে, আমরা 0 কমান্ড ব্যবহার করি।

C++ চালিয়ে যান/ব্রেক করুন:

C++ অবিরত বিবৃতি:

কন্টিনিউ স্টেটমেন্ট C++ প্রোগ্রামিং ল্যাঙ্গুয়েজে ব্যবহার করা হয় লুপের বর্তমান অবতারনা এড়াতে সেইসাথে পরবর্তী পুনরাবৃত্তিতে নিয়ন্ত্রণ সরানোর জন্য। লুপ করার সময়, অবিরত বিবৃতি নির্দিষ্ট বিবৃতি এড়িয়ে যেতে ব্যবহার করা যেতে পারে। এক্সিকিউটিভ স্টেটমেন্টের সাথে এটি লুপের মধ্যেও ব্যবহার করা হয়। নির্দিষ্ট শর্ত সত্য হলে, অবিরত বিবৃতি অনুসরণ করে সমস্ত বিবৃতি বাস্তবায়িত হয় না।

লুপের জন্য:

এই উদাহরণে, আমরা কিছু নির্দিষ্ট প্রয়োজনীয়তা অতিক্রম করার সময় প্রয়োজনীয় ফলাফল পেতে C++ থেকে অবিরত বিবৃতি সহ 'ফর লুপ' ব্যবহার করি।

আমরা লাইব্রেরি অন্তর্ভুক্ত করে এবং 'namespace std' ব্যবহার করে শুরু করি। তারপর আমরা কল করছি প্রধান() ফাংশন আমরা লুপ জন্য ব্যবহার. লুপের ভিতরে, আমরা একটি ভেরিয়েবল 'k' ঘোষণা করি যা 3 এবং 8 এর মধ্যে রয়েছে বলে মনে করা হয়। আমরা পুনরাবৃত্তি চালিয়ে যাওয়ার জন্য একটি শর্ত ব্যবহার করি এমনকি যদি (k = = 5)। তারপর শর্ত উল্লেখ করার পরে 'চালিয়ে যান' বিবৃতি ব্যবহার করুন। শেষে. আউটপুট দেখানোর জন্য, আমরা 'cout' কমান্ডের সাথে 'রিটার্ন 0' কমান্ড ব্যবহার করি।

কিছুক্ষণ লুপ সহ:

এই প্রদর্শনের সময়, আমরা কি ধরণের আউটপুট তৈরি হতে পারে তা দেখতে কিছু শর্ত সহ 'while loop' এবং C++ 'continue' স্টেটমেন্ট উভয়ই ব্যবহার করেছি।

এই উদাহরণে, আমরা শুধুমাত্র 40-এ সংখ্যা যোগ করার জন্য একটি শর্ত সেট করি। যদি প্রবেশ করা পূর্ণসংখ্যাটি একটি ঋণাত্মক সংখ্যা হয়, তাহলে 'যখন' লুপটি বন্ধ হয়ে যাবে। অন্যদিকে, যদি সংখ্যাটি 40-এর বেশি হয়, তাহলে সেই নির্দিষ্ট সংখ্যাটি পুনরাবৃত্তি থেকে বাদ যাবে।

আমরা 'namespace std' ব্যবহার করে লাইব্রেরি অন্তর্ভুক্ত করব এবং তারপরে কল করব প্রধান() ফাংশন আমরা একটি পরিবর্তনশীল 's' শুরু করি। পরবর্তী ধাপে আরেকটি পরিবর্তনশীল 'সংখ্যা' ঘোষণা করা হয়েছে। আমরা 'while' লুপ ব্যবহার করি। এখন, আমরা শর্তটি নির্দিষ্ট করি যে প্রয়োজনীয় মানটি শূন্যের উপরে বা সমান হবে। সমস্ত ইতিবাচক সংখ্যা যোগ করতে, আমরা 's += সংখ্যা' বিবৃতি ব্যবহার করি। 'কোন নম্বর লিখুন' কনসোলে বার্তাটি দেখানোর জন্য 'cout' কমান্ড প্রয়োগ করা হবে। আমরা 'cin' স্টেটমেন্ট ব্যবহার করে ব্যবহারকারীর কাছ থেকে পূর্ণসংখ্যা পাই। আমরা 'যদি' বিবৃতি ব্যবহার করি। যখনই সংজ্ঞায়িত সংখ্যা 40-এর বেশি হবে, বার্তাটি দেখানো হবে। তারপর, আমরা 'চালিয়ে যান' কমান্ড ব্যবহার করেছি। এই সমস্ত পদক্ষেপের পরে, 'চালিয়ে যান' বিবৃতিটি কার্যকর করা হবে। সমস্ত সংখ্যার যোগফল দেখাতে, আমরা 'cout' বিবৃতিটি ব্যবহার করি।

C++ বিরতি বিবৃতি:

যখনই C++ এ একটি লুপে ব্রেক স্টেটমেন্ট ব্যবহার করা হয়, লুপটি তাৎক্ষণিকভাবে শেষ হয়ে যায় এবং লুপের পরে স্টেটমেন্টে প্রোগ্রাম কন্ট্রোল রিস্টার্ট হয়। একটি 'সুইচ' বিবৃতির মধ্যে একটি মামলা শেষ করাও সম্ভব।

লুপের জন্য:

এখানে, আমরা বিভিন্ন মানের উপর পুনরাবৃত্তি করে আউটপুট পর্যবেক্ষণ করতে 'ব্রেক' স্টেটমেন্টের সাথে 'for' লুপটি ব্যবহার করব।

প্রথমে, আমরা একটি হেডার ফাইল অন্তর্ভুক্ত করি। এরপরে, আমরা 'namespace std' ব্যবহার করি। main() ফাংশন কল করার পর, আমরা লুপের জন্য ব্যবহার করেছি। এখানে, আমরা ভেরিয়েবল 'm' শুরু করব। আমরা শর্তটি প্রয়োগ করব যে 'm' এর মান 10 এবং 20 এর মধ্যে রয়েছে। 'ব্রেক' শর্তটি এমনভাবে কার্যকর করা হবে যেন (m == 17)। ফলাফল প্রিন্ট করতে, আমরা 'cout' ব্যবহার করেছি। তারপর, 'রিটার্ন 0' কমান্ড প্রয়োগ করা হবে।

কিছুক্ষণ লুপ সহ:

আমরা বিরতি বিবৃতি সহ 'যখন' লুপ ব্যবহার করতে যাচ্ছি।

আমরা লাইব্রেরি আমদানি করে শুরু করি। 'নেমস্পেস std' অন্তর্ভুক্ত করা হবে। main() পদ্ধতির মধ্যে, দুটি ভেরিয়েবল 'nbr' এবং 'x' শুরু করা হবে। আমরা আর্গুমেন্ট হিসেবে 'while' লুপ এবং পাস 'true' ব্যবহার করেছি। ব্যবহারকারীর কাছ থেকে মান পেতে, আমরা 'cin' কমান্ড ব্যবহার করি। এর পরে, আমরা 'if' বিবৃতিটি ব্যবহার করেছি। এর সাথে, যদি (nbr < 0) শর্তটি নির্দিষ্ট করতে 'ব্রেক' শর্ত প্রয়োগ করা হয়। সমস্ত ইতিবাচক মান যোগ করতে, আমরা 'x += nbr' সূত্র ব্যবহার করেছি। এই সমষ্টি প্রদর্শন করতে, আমরা 'cout' বিবৃতি যোগ করেছি।

C++ ফাংশন:

ফাংশনগুলি একটি ইতিমধ্যে পরিচিত প্রোগ্রামকে কোডের একাধিক খণ্ডে গঠন করতে ব্যবহৃত হয় যা শুধুমাত্র যখন এটিকে কল করা হয় তখনই চালানো হয়। C++ প্রোগ্রামিং ভাষায়, একটি ফাংশনকে বিবৃতিগুলির একটি গ্রুপ হিসাবে সংজ্ঞায়িত করা হয় যেগুলিকে একটি উপযুক্ত নাম দেওয়া হয় এবং তাদের দ্বারা ডাকা হয়। ব্যবহারকারী ফাংশনে ডেটা পাঠাতে পারে যাকে আমরা পরামিতি বলি। যখন কোডটি পুনঃব্যবহারের সবচেয়ে বেশি সম্ভাবনা থাকে তখন কার্যগুলি কার্যকর করার জন্য ফাংশনগুলি দায়ী৷

একটি ফাংশন তৈরি:

যদিও C++ অনেক পূর্ব-নির্ধারিত ফাংশন প্রদান করে প্রধান(), যা কোডটি কার্যকর করতে সহায়তা করে। একইভাবে, আপনি আপনার প্রয়োজন অনুযায়ী আপনার ফাংশন তৈরি এবং সংজ্ঞায়িত করতে পারেন। সমস্ত সাধারণ ফাংশনের মতোই, এখানে, একটি ঘোষণার জন্য আপনার ফাংশনের জন্য একটি নাম প্রয়োজন যা পরে '()' এর সাথে একটি বন্ধনী যুক্ত করা হয়।

বাক্য গঠন:

অকার্যকর শ্রম ( )

{

// ফাংশনের বডি

}

Void হল ফাংশনের রিটার্ন টাইপ। শ্রম হল এটির দেওয়া নাম এবং কোঁকড়া বন্ধনীগুলি ফাংশনের মূল অংশকে আবদ্ধ করবে যেখানে আমরা সম্পাদনের জন্য কোড যোগ করি।

একটি ফাংশন কল করা:

কোডে ঘোষিত ফাংশনগুলি কেবল তখনই কার্যকর করা হয় যখন সেগুলি আহ্বান করা হয়। একটি ফাংশন কল করার জন্য, আপনাকে একটি সেমিকোলন ';' দ্বারা অনুসরণ করা বন্ধনী সহ ফাংশনের নাম উল্লেখ করতে হবে।

উদাহরণ:

আসুন এই পরিস্থিতিতে একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন ঘোষণা এবং নির্মাণ করা যাক।

প্রাথমিকভাবে, প্রতিটি প্রোগ্রামে বর্ণিত হিসাবে, প্রোগ্রামটি সম্পাদনে সহায়তা করার জন্য আমাদের একটি লাইব্রেরি এবং নামস্থান বরাদ্দ করা হয়। ব্যবহারকারী-সংজ্ঞায়িত ফাংশন শ্রম() লেখার আগে সবসময় ডাকা হয় প্রধান() ফাংশন নামের একটি ফাংশন শ্রম() ঘোষণা করা হয় যেখানে একটি বার্তা 'একটি শ্রম সম্মানের যোগ্য!' প্রদর্শিত হয়। মধ্যে প্রধান() পূর্ণসংখ্যা রিটার্ন টাইপের সাথে ফাংশন, আমরা কল করছি শ্রম() ফাংশন

এটি হল সাধারণ বার্তা যা ব্যবহারকারী-সংজ্ঞায়িত ফাংশনে সংজ্ঞায়িত করা হয়েছিল এখানে এর সাহায্যে প্রদর্শিত হয় প্রধান() ফাংশন

অকার্যকর:

উল্লিখিত উদাহরণে, আমরা লক্ষ্য করেছি যে ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের রিটার্ন টাইপ অকার্যকর। এটি নির্দেশ করে যে ফাংশন দ্বারা কোন মান ফেরত দেওয়া হচ্ছে না। এটি প্রতিনিধিত্ব করে যে মানটি উপস্থিত নেই বা সম্ভবত শূন্য। কারণ যখনই একটি ফাংশন শুধুমাত্র বার্তাগুলি প্রিন্ট করে, তখন এটির কোনো রিটার্ন মান প্রয়োজন হয় না।

এই অকার্যকরটি একইভাবে ফাংশনের প্যারামিটার স্পেসে ব্যবহার করা হয় যাতে স্পষ্টভাবে বলা হয় যে এই ফাংশনটি কল করার সময় কোন প্রকৃত মান নেয় না। উপরের পরিস্থিতিতে, আমরাও কল করব শ্রম() হিসাবে কাজ:

অকার্যকর শ্রম ( অকার্যকর )

{

কাউট << “একজন শ্রম সম্মানের যোগ্য ! ' ;

}

প্রকৃত পরামিতি:

এক ফাংশন জন্য পরামিতি সংজ্ঞায়িত করতে পারেন. একটি ফাংশনের প্যারামিটারগুলি ফাংশনের আর্গুমেন্ট তালিকায় সংজ্ঞায়িত করা হয় যা ফাংশনের নামের সাথে যোগ করে। যখনই আমরা ফাংশনটি কল করি, তখনই এক্সিকিউশন সম্পূর্ণ করার জন্য আমাদের প্যারামিটারের প্রকৃত মান পাস করতে হবে। এগুলি প্রকৃত পরামিতি হিসাবে সমাপ্ত হয়। যেখানে ফাংশনটি সংজ্ঞায়িত করার সময় যে প্যারামিটারগুলি সংজ্ঞায়িত করা হয় সেগুলি আনুষ্ঠানিক প্যারামিটার হিসাবে পরিচিত।

উদাহরণ:

এই উদাহরণে, আমরা একটি ফাংশনের মাধ্যমে দুটি পূর্ণসংখ্যার মান বিনিময় বা প্রতিস্থাপন করতে যাচ্ছি।

শুরুতে, আমরা হেডার ফাইলটি নিচ্ছি। ব্যবহারকারী-সংজ্ঞায়িত ফাংশন হল ঘোষিত এবং সংজ্ঞায়িত নাম উপ()। এই ফাংশনটি i এবং n দুটি পূর্ণসংখ্যার মানের প্রতিস্থাপনের জন্য ব্যবহৃত হয়। এর পরে, এই দুটি পূর্ণসংখ্যার বিনিময়ের জন্য গাণিতিক অপারেটর ব্যবহার করা হয়। প্রথম পূর্ণসংখ্যা ‘i’-এর মান ‘n’-এর জায়গায় সংরক্ষণ করা হয় এবং ‘i’-এর মানের জায়গায় n-এর মান সংরক্ষিত হয়। তারপর, মান পরিবর্তন করার পরে ফলাফল মুদ্রিত হয়। আমরা যদি সম্পর্কে কথা বলি প্রধান() ফাংশন, আমরা ব্যবহারকারীর কাছ থেকে দুটি পূর্ণসংখ্যার মান নিচ্ছি এবং প্রদর্শন করছি। শেষ ধাপে, ব্যবহারকারী-সংজ্ঞায়িত ফাংশন উপ() বলা হয় এবং দুটি মান বিনিময় হয়।

দুটি সংখ্যা প্রতিস্থাপনের ক্ষেত্রে, আমরা স্পষ্ট দেখতে পাচ্ছি যে ব্যবহার করার সময় উপ() ফাংশন, প্যারামিটার তালিকার ভিতরে 'i' এবং 'n'-এর মান হল আনুষ্ঠানিক পরামিতি। প্রকৃত পরামিতি হল পরামিতি যা এর শেষে যাচ্ছে প্রধান() ফাংশন যেখানে প্রতিস্থাপন ফাংশন বলা হচ্ছে।

C++ পয়েন্টার:

C++ এ পয়েন্টার শেখা বেশ সহজ এবং ব্যবহার করাও দারুণ। C++ ভাষাতে পয়েন্টার ব্যবহার করা হয় কারণ তারা আমাদের কাজকে সহজ করে তোলে এবং পয়েন্টার জড়িত থাকলে সমস্ত ক্রিয়াকলাপ অত্যন্ত দক্ষতার সাথে কাজ করে। এছাড়াও, ডায়নামিক মেমরি বরাদ্দকরণের মতো পয়েন্টার ব্যবহার না করা পর্যন্ত কিছু কাজ সম্পন্ন করা হবে না। পয়েন্টার সম্পর্কে কথা বললে, মূল ধারণা, যেটিকে অবশ্যই বুঝতে হবে যে পয়েন্টারটি কেবল একটি পরিবর্তনশীল যা সঠিক মেমরি ঠিকানাটিকে তার মান হিসাবে সংরক্ষণ করবে। C++ এ পয়েন্টারগুলির ব্যাপক ব্যবহার নিম্নলিখিত কারণগুলির জন্য:

  • একটি ফাংশন অন্য ফাংশন পাস করতে.
  • গাদা উপর নতুন বস্তু বরাদ্দ.
  • একটি অ্যারের উপাদানগুলির পুনরাবৃত্তির জন্য

সাধারণত, '&' (অ্যাম্পারস্যান্ড) অপারেটরটি মেমরির যেকোনো বস্তুর ঠিকানা অ্যাক্সেস করতে ব্যবহৃত হয়।

পয়েন্টার এবং তাদের প্রকার:

পয়েন্টার নিম্নলিখিত বিভিন্ন ধরনের আছে:

  • নাল পয়েন্টার: এগুলি সি++ লাইব্রেরিতে শূন্যের মান সহ পয়েন্টার।
  • পাটিগণিত পয়েন্টার: এতে চারটি প্রধান গাণিতিক অপারেটর রয়েছে যা অ্যাক্সেসযোগ্য যা হল ++, –, +, -।
  • পয়েন্টার একটি অ্যারে: এগুলি এমন অ্যারে যা কিছু পয়েন্টার সংরক্ষণ করতে ব্যবহৃত হয়।
  • পয়েন্টার থেকে পয়েন্টার: এটি যেখানে একটি পয়েন্টার একটি পয়েন্টার উপর ব্যবহার করা হয়.

উদাহরণ:

পরবর্তী উদাহরণের উপর চিন্তা করুন যেখানে কয়েকটি ভেরিয়েবলের ঠিকানা মুদ্রিত হয়।

হেডার ফাইল এবং স্ট্যান্ডার্ড নেমস্পেস অন্তর্ভুক্ত করার পরে, আমরা দুটি ভেরিয়েবল শুরু করছি। একটি হল একটি পূর্ণসংখ্যা মান যা i' দ্বারা উপস্থাপিত হয় এবং আরেকটি হল 10টি অক্ষরের আকারের একটি অক্ষর টাইপ অ্যারে 'I'। উভয় ভেরিয়েবলের ঠিকানা তারপর 'cout' কমান্ড ব্যবহার করে প্রদর্শিত হয়।

আমরা যে আউটপুট পেয়েছি তা নীচে দেখানো হয়েছে:

এই ফলাফল উভয় ভেরিয়েবলের ঠিকানা দেখায়।

অন্যদিকে, একটি পয়েন্টারকে একটি পরিবর্তনশীল হিসাবে বিবেচনা করা হয় যার মান নিজেই একটি ভিন্ন পরিবর্তনশীলের ঠিকানা। একটি পয়েন্টার সর্বদা একটি ডেটাটাইপকে নির্দেশ করে যার একই প্রকার রয়েছে যা একটি (*) অপারেটর দিয়ে তৈরি করা হয়।

একটি পয়েন্টারের ঘোষণা:

পয়েন্টার এই ভাবে ঘোষণা করা হয়:

টাইপ * ছিল - নাম ;

পয়েন্টারের বেস টাইপ 'টাইপ' দ্বারা নির্দেশিত হয় যখন পয়েন্টারের নাম 'var-নাম' দ্বারা প্রকাশ করা হয়। এবং একটি ভেরিয়েবল এনটাইটেল করার জন্য পয়েন্টার অ্যাস্টারিস্ক(*) ব্যবহার করা হয়।

ভেরিয়েবলগুলিতে পয়েন্টার বরাদ্দ করার উপায়:

int * পাই ; // একটি পূর্ণসংখ্যা ডেটাটাইপের পয়েন্টার

ডাবল * পিডি ; // একটি ডবল ডেটাটাইপের পয়েন্টার

ভাসা * পিএফ ; // একটি ফ্লোট ডেটাটাইপের পয়েন্টার

চর * পিসি ; // একটি চর ডেটাটাইপের পয়েন্টার

প্রায় সর্বদা একটি দীর্ঘ হেক্সাডেসিমেল সংখ্যা থাকে যা মেমরি ঠিকানাকে উপস্থাপন করে যা প্রাথমিকভাবে সমস্ত পয়েন্টারের জন্য তাদের ডেটাটাইপ নির্বিশেষে একই।

উদাহরণ:

নিম্নলিখিত উদাহরণটি প্রদর্শন করবে কিভাবে পয়েন্টারগুলি '&' অপারেটরকে প্রতিস্থাপন করে এবং ভেরিয়েবলের ঠিকানা সংরক্ষণ করে।

আমরা লাইব্রেরি এবং ডিরেক্টরি সমর্থন সংহত করতে যাচ্ছি। তারপর, আমরা আহ্বান জানাবে প্রধান() ফাংশন যেখানে আমরা প্রথমে 55 মান সহ 'int' টাইপের একটি ভেরিয়েবল 'n' ঘোষণা করি এবং শুরু করি। পরের লাইনে, আমরা 'p1' নামে একটি পয়েন্টার ভেরিয়েবল শুরু করছি। এর পরে, আমরা পয়েন্টার 'p1'-এ 'n' ভেরিয়েবলের ঠিকানা বরাদ্দ করি এবং তারপর আমরা 'n' ভেরিয়েবলের মান দেখাই। 'p1' পয়েন্টারে সংরক্ষিত 'n'-এর ঠিকানা প্রদর্শিত হয়। এরপরে, 'cout' কমান্ড ব্যবহার করে স্ক্রিনে '*p1'-এর মান প্রিন্ট করা হয়। আউটপুট নিম্নরূপ:

এখানে, আমরা দেখতে পাচ্ছি যে 'n'-এর মান 55 এবং পয়েন্টার 'p1'-এ সংরক্ষিত 'n'-এর ঠিকানা 0x6ffe14 হিসাবে দেখানো হয়েছে। পয়েন্টার ভেরিয়েবলের মান পাওয়া যায় এবং এটি 55 যা ইন্টিজার ভেরিয়েবলের মানের সমান। অতএব, একটি পয়েন্টার ভেরিয়েবলের ঠিকানা সংরক্ষণ করে এবং * পয়েন্টারে পূর্ণসংখ্যার মান সংরক্ষিত থাকে যা ফলস্বরূপ প্রাথমিকভাবে সংরক্ষিত ভেরিয়েবলের মান ফিরিয়ে দেবে।

উদাহরণ:

আসুন আরেকটি উদাহরণ বিবেচনা করি যেখানে আমরা একটি পয়েন্টার ব্যবহার করছি যা একটি স্ট্রিংয়ের ঠিকানা সংরক্ষণ করে।

এই কোডে, আমরা প্রথমে লাইব্রেরি এবং নামস্থান যোগ করছি। মধ্যে প্রধান() ফাংশনটি আমাদের 'মেকআপ' ​​নামে একটি স্ট্রিং ঘোষণা করতে হবে যার মান 'মাস্কারা' রয়েছে। মেকআপ ভেরিয়েবলের ঠিকানা সংরক্ষণ করতে একটি স্ট্রিং টাইপ পয়েন্টার '*p2' ব্যবহার করা হয়। পরিবর্তনশীল 'মেকআপ'-এর মান তারপর 'cout' বিবৃতি ব্যবহার করে স্ক্রিনে প্রদর্শিত হয়। এর পরে, ভেরিয়েবল 'মেকআপ'-এর ঠিকানা প্রিন্ট করা হয়, এবং শেষে, পয়েন্টার ভেরিয়েবল 'p2' প্রদর্শিত হয় যাতে পয়েন্টারের সাথে 'মেকআপ' ​​ভেরিয়েবলের মেমরি ঠিকানা দেখানো হয়।

উপরের কোড থেকে প্রাপ্ত আউটপুট নিম্নরূপ:

প্রথম লাইনে প্রদর্শিত 'মেকআপ' ​​ভেরিয়েবলের মান রয়েছে। দ্বিতীয় লাইনটি পরিবর্তনশীল 'মেকআপ' ​​এর ঠিকানা দেখায়। শেষ লাইনে, পয়েন্টার ব্যবহার সহ 'মেকআপ' ​​ভেরিয়েবলের মেমরি ঠিকানা দেখানো হয়েছে।

C++ মেমরি ম্যানেজমেন্ট:

C++ এ কার্যকরী মেমরি ব্যবস্থাপনার জন্য, C++ এ কাজ করার সময় মেমরি পরিচালনার জন্য অনেক অপারেশন সহায়ক। যখন আমরা C++ ব্যবহার করি, তখন সর্বাধিক ব্যবহৃত মেমরি বরাদ্দকরণ পদ্ধতি হল ডায়নামিক মেমরি বরাদ্দ যেখানে রানটাইম চলাকালীন ভেরিয়েবলগুলিতে মেমরি বরাদ্দ করা হয়; অন্যান্য প্রোগ্রামিং ভাষার মতো নয় যেখানে কম্পাইলার ভেরিয়েবলগুলিতে মেমরি বরাদ্দ করতে পারে। C++ এ, গতিশীলভাবে বরাদ্দ করা ভেরিয়েবলের ডিললোকেশন প্রয়োজন, যাতে ভেরিয়েবলটি আর ব্যবহার না হলে মেমরিটি বিনামূল্যে মুক্তি পায়।

C++ এ মেমরির গতিশীল বরাদ্দ এবং ডিলোকেশনের জন্য, আমরা করি ' নতুন' এবং 'মুছে ফেলা' অপারেশন এটি মেমরি পরিচালনা করা গুরুত্বপূর্ণ যাতে কোনও মেমরি নষ্ট না হয়। মেমরি বরাদ্দ সহজ এবং কার্যকরী হয়ে ওঠে. যেকোনো C++ প্রোগ্রামে, মেমরি দুটি দিকগুলির একটিতে নিযুক্ত করা হয়: হয় একটি গাদা বা একটি স্ট্যাক হিসাবে।

  • স্ট্যাক : ফাংশনের ভিতরে ঘোষিত সমস্ত ভেরিয়েবল এবং ফাংশনের সাথে আন্তঃসম্পর্কিত অন্যান্য বিবরণ স্ট্যাকের মধ্যে সংরক্ষণ করা হয়।
  • গাদা : যেকোন ধরণের অব্যবহৃত মেমরি বা যে অংশ থেকে আমরা একটি প্রোগ্রাম চালানোর সময় ডায়নামিক মেমরি বরাদ্দ বা বরাদ্দ করি তাকে হিপ বলে।

অ্যারে ব্যবহার করার সময়, মেমরি বরাদ্দ একটি কাজ যেখানে আমরা রানটাইম ছাড়া মেমরি নির্ধারণ করতে পারি না। সুতরাং, আমরা অ্যারেতে সর্বাধিক মেমরি বরাদ্দ করি তবে এটি একটি ভাল অনুশীলনও নয় কারণ বেশিরভাগ ক্ষেত্রেই মেমরিটি অব্যবহৃত থাকে এবং এটি কোনওভাবে নষ্ট হয়ে যায় যা আপনার ব্যক্তিগত কম্পিউটারের জন্য একটি ভাল বিকল্প বা অনুশীলন নয়। এই কারণেই, আমাদের কয়েকটি অপারেটর রয়েছে যা রানটাইমের সময় গাদা থেকে মেমরি বরাদ্দ করতে ব্যবহৃত হয়। দুটি প্রধান অপারেটর 'নতুন' এবং 'মুছুন' দক্ষ মেমরি বরাদ্দ এবং ডিলোকেশনের জন্য ব্যবহৃত হয়।

C++ নতুন অপারেটর:

নতুন অপারেটর মেমরি বরাদ্দের জন্য দায়ী এবং নিম্নরূপ ব্যবহার করা হয়:

এই কোডে, আমরা লাইব্রেরি এবং নেমস্পেস অন্তর্ভুক্ত করি। তারপর, আমরা 'int' ডেটাটাইপ সহ একটি পয়েন্টার শুরু করেছি। পরের লাইনে, এই পয়েন্টারটিকে 'নতুন' অপারেটর বরাদ্দ করা হয়েছে।

একটি পয়েন্টার ব্যবহার করে সফলভাবে 'int' ভেরিয়েবলে মেমরি বরাদ্দ করা হয়েছে।

C++ ডিলিট অপারেটর:

যখনই আমরা একটি ভেরিয়েবল ব্যবহার করে শেষ করি, তখন আমাদের অবশ্যই মেমরিটি ডিলকেট করতে হবে যেটি আমরা একবার বরাদ্দ করেছি কারণ এটি আর ব্যবহারে নেই। এর জন্য, আমরা মেমরি রিলিজ করতে 'ডিলিট' অপারেটর ব্যবহার করি।

আমরা এখন যে উদাহরণটি পর্যালোচনা করতে যাচ্ছি তাতে উভয় অপারেটর অন্তর্ভুক্ত রয়েছে।

আমরা ব্যবহারকারীর কাছ থেকে নেওয়া তিনটি ভিন্ন মানের জন্য গড় গণনা করছি। পয়েন্টার ভেরিয়েবলগুলি মান সংরক্ষণের জন্য 'নতুন' অপারেটরের সাথে বরাদ্দ করা হয়। গড় সূত্র প্রয়োগ করা হয়. এর পরে, 'মুছুন' অপারেটরটি ব্যবহার করা হয় যা 'নতুন' অপারেটর ব্যবহার করে পয়েন্টার ভেরিয়েবলগুলিতে সংরক্ষিত মানগুলি মুছে ফেলে। এটি একটি গতিশীল বরাদ্দ যেখানে রানটাইমের সময় বরাদ্দ করা হয় এবং তারপর প্রোগ্রামটি শেষ হওয়ার পরেই ডিললোকেশন ঘটে।

মেমরি বরাদ্দের জন্য অ্যারের ব্যবহার:

এখন, আমরা অ্যারে ব্যবহার করার সময় কীভাবে 'নতুন' এবং 'মুছুন' অপারেটরগুলি ব্যবহার করা হয় তা দেখতে যাচ্ছি। গতিশীল বরাদ্দ একইভাবে ঘটবে যেমনটি ভেরিয়েবলের ক্ষেত্রে ঘটেছিল কারণ সিনট্যাক্স প্রায় একই।

প্রদত্ত উদাহরণে, আমরা উপাদানগুলির অ্যারে বিবেচনা করছি যার মান ব্যবহারকারীর কাছ থেকে নেওয়া হয়েছে। অ্যারের উপাদানগুলি নেওয়া হয় এবং পয়েন্টার ভেরিয়েবল ঘোষণা করা হয় এবং তারপর মেমরি বরাদ্দ করা হয়। মেমরি বরাদ্দের শীঘ্রই, অ্যারে উপাদানগুলির ইনপুট পদ্ধতি শুরু হয়। এর পরে, অ্যারের উপাদানগুলির জন্য আউটপুট একটি 'ফর' লুপ ব্যবহার করে দেখানো হয়। এই লুপে n দ্বারা উপস্থাপিত অ্যারের প্রকৃত আকারের চেয়ে কম আকারের উপাদানগুলির পুনরাবৃত্তি অবস্থা রয়েছে।

যখন সমস্ত উপাদান ব্যবহার করা হয় এবং তাদের আবার ব্যবহার করার জন্য আর কোন প্রয়োজন নেই, তখন উপাদানগুলির জন্য নির্ধারিত মেমরিটি 'মুছুন' অপারেটর ব্যবহার করে ডিলোকেট করা হবে।

আউটপুটে, আমরা দুইবার মুদ্রিত মানগুলির সেট দেখতে পাচ্ছি। প্রথম 'ফর' লুপটি উপাদানগুলির মানগুলি লেখার জন্য ব্যবহার করা হয়েছিল এবং অন্য 'ফর' লুপটি ইতিমধ্যে লিখিত মানগুলির মুদ্রণের জন্য ব্যবহার করা হয়েছিল যা দেখায় যে ব্যবহারকারী স্পষ্টতার জন্য এই মানগুলি লিখেছেন।

সুবিধাদি:

C++ প্রোগ্রামিং ভাষায় 'নতুন' এবং 'মুছুন' অপারেটর সর্বদা অগ্রাধিকার এবং ব্যাপকভাবে ব্যবহৃত হয়। একটি পুঙ্খানুপুঙ্খ আলোচনা এবং বোঝার সময়, এটি উল্লেখ করা হয় যে 'নতুন' অপারেটরের অনেক সুবিধা রয়েছে। মেমরি বরাদ্দের জন্য 'নতুন' অপারেটরের সুবিধাগুলি নিম্নরূপ:

  • নতুন অপারেটরটি আরও সহজে ওভারলোড করা যেতে পারে।
  • রানটাইমের সময় মেমরি বরাদ্দ করার সময়, যখনই পর্যাপ্ত মেমরি না থাকে তখন প্রোগ্রামটি বন্ধ করার পরিবর্তে একটি স্বয়ংক্রিয় ব্যতিক্রম নিক্ষেপ করা হবে।
  • টাইপকাস্টিং পদ্ধতি ব্যবহার করার তাড়াহুড়ো এখানে উপস্থিত নেই কারণ 'নতুন' অপারেটরের মেমরির মতোই একই ধরণের রয়েছে যা আমরা বরাদ্দ করেছি।
  • 'নতুন' অপারেটর সাইজফ() অপারেটরকে 'নতুন' হিসাবে ব্যবহার করার ধারণাটিকেও প্রত্যাখ্যান করে যা অবজেক্টের আকারকে অনিবার্যভাবে গণনা করবে।
  • 'নতুন' অপারেটর আমাদেরকে বস্তুগুলিকে শুরু করতে এবং ঘোষণা করতে সক্ষম করে যদিও এটি তাদের জন্য স্বতঃস্ফূর্তভাবে স্থান তৈরি করে।

C++ অ্যারে:

আমরা অ্যারেগুলি কী এবং কীভাবে সেগুলি একটি C++ প্রোগ্রামে ঘোষণা এবং প্রয়োগ করা হয় সে সম্পর্কে একটি পুঙ্খানুপুঙ্খ আলোচনা করতে যাচ্ছি। অ্যারে হল একটি ডাটা স্ট্রাকচার যা শুধুমাত্র একটি ভেরিয়েবলে একাধিক মান সঞ্চয় করার জন্য ব্যবহৃত হয় যার ফলে অনেকগুলি ভেরিয়েবল স্বাধীনভাবে ঘোষণা করার তাড়াহুড়ো কমে যায়।

অ্যারের ঘোষণা:

একটি অ্যারে ঘোষণা করার জন্য, একজনকে প্রথমে ভেরিয়েবলের ধরনটি সংজ্ঞায়িত করতে হবে এবং অ্যারের একটি উপযুক্ত নাম দিতে হবে যা তারপর বর্গাকার বন্ধনী বরাবর যোগ করা হয়। এটিতে একটি নির্দিষ্ট অ্যারের আকার দেখানো উপাদানের সংখ্যা থাকবে।

উদাহরণ স্বরূপ:

স্ট্রিং মেকআপ [ 5 ] ;

এই ভেরিয়েবলটিকে ঘোষণা করা হয়েছে যে এটিতে 'মেকআপ' ​​নামে একটি অ্যারেতে পাঁচটি স্ট্রিং রয়েছে। এই অ্যারের মানগুলি সনাক্ত করতে এবং চিত্রিত করার জন্য, আমাদের কোঁকড়া বন্ধনী ব্যবহার করতে হবে, প্রতিটি উপাদান আলাদাভাবে ডাবল ইনভার্টেড কমা দিয়ে আবদ্ধ, প্রতিটির মধ্যে একটি একক কমা দিয়ে আলাদা করা হয়েছে।

উদাহরণ স্বরূপ:

স্ট্রিং মেকআপ [ 5 ] = { 'মাসকারা' , 'আভা' , 'লিপস্টিক' , 'ভিত্তি' , 'প্রথম' } ;

একইভাবে, আপনি যদি 'int' বলে মনে করা হয় এমন একটি ভিন্ন ডেটাটাইপ দিয়ে অন্য অ্যারে তৈরি করতে চান, তবে পদ্ধতিটি একই হবে আপনাকে নীচে দেখানো ভেরিয়েবলের ডেটা টাইপ পরিবর্তন করতে হবে:

int একাধিক [ 5 ] = { দুই , 4 , 6 , 8 , 10 } ;

অ্যারেতে পূর্ণসংখ্যার মান নির্ধারণ করার সময়, তাদের অবশ্যই উল্টানো কমাগুলিতে থাকা উচিত নয়, যা শুধুমাত্র স্ট্রিং ভেরিয়েবলের জন্য কাজ করবে। সুতরাং, চূড়ান্তভাবে একটি অ্যারে হল আন্তঃসম্পর্কিত ডেটা আইটেমগুলির একটি সংগ্রহ যা তাদের মধ্যে সংরক্ষিত প্রাপ্ত ডেটা প্রকারগুলি সহ।

কিভাবে অ্যারের উপাদান অ্যাক্সেস করবেন?

অ্যারের অন্তর্ভুক্ত সমস্ত উপাদান একটি স্বতন্ত্র সংখ্যার সাথে বরাদ্দ করা হয় যা তাদের সূচক নম্বর যা অ্যারে থেকে একটি উপাদান অ্যাক্সেস করার জন্য ব্যবহৃত হয়। সূচক মান 0 দিয়ে শুরু হয় অ্যারের আকারের চেয়ে একটি কম পর্যন্ত। একেবারে প্রথম মানের সূচক মান 0 আছে।

উদাহরণ:

একটি খুব মৌলিক এবং সহজ উদাহরণ বিবেচনা করুন যেখানে আমরা একটি অ্যারেতে ভেরিয়েবল শুরু করব।

প্রথম ধাপে, আমরা হেডার ফাইলটি অন্তর্ভুক্ত করছি, যা স্বয়ংক্রিয়ভাবে প্রোগ্রামে প্রয়োজনীয় সমস্ত লাইব্রেরি যোগ করবে। নামস্থান 'std' ডিরেক্টরির জন্য সুযোগ প্রদান করবে। তৃতীয় লাইনে, আমরা কল করছি প্রধান() ফাংশন কোঁকড়া বন্ধনীটি ফাংশনের শুরুকে নির্দেশ করে। ফাংশনে প্রবেশ করার পর, আমরা 'digits' নামের 'int' টাইপ অ্যারে ঘোষণা করব। এটি 4 এর আকার ধারণ করে, যার মানে এটি একবারে মাত্র 4টি পূর্ণসংখ্যা মান ধারণ করতে পারে। অ্যারের প্রতিটি উপাদান আলাদাভাবে একটি অনন্য এবং ভিন্ন অঙ্কের সাথে বরাদ্দ করা হয়েছে। তারপর প্রতিটি আইটেম পৃথকভাবে কল করা হচ্ছে সঙ্গে সমগ্র অ্যারে প্রদর্শিত হয়.

এটি উপরের কোড থেকে প্রাপ্ত ফলাফল। 'endl' কীওয়ার্ড অন্য আইটেমটিকে স্বয়ংক্রিয়ভাবে পরবর্তী লাইনে নিয়ে যায়।

উদাহরণ:

এই কোডে, আমরা একটি অ্যারের আইটেম প্রিন্ট করার জন্য একটি 'ফর' লুপ ব্যবহার করছি।

উপরের উদাহরণে, আমরা অপরিহার্য লাইব্রেরি যোগ করছি। স্ট্যান্ডার্ড নেমস্পেস যোগ করা হচ্ছে। দ্য প্রধান() ফাংশন হল একটি ফাংশন যেখানে আমরা একটি নির্দিষ্ট প্রোগ্রাম চালানোর জন্য সমস্ত কার্যকারিতা সম্পাদন করতে যাচ্ছি। এর পরে, আমরা 'Num' নামে একটি int টাইপ অ্যারে ঘোষণা করছি, যার আকার 10। এই দশটি ভেরিয়েবলের মান 'for' লুপ ব্যবহার করে ব্যবহারকারীর কাছ থেকে নেওয়া হয়েছে। এই অ্যারের প্রদর্শনের জন্য, একটি 'ফর' লুপ আবার ব্যবহার করা হয়। অ্যারেতে সংরক্ষিত 10টি পূর্ণসংখ্যা 'cout' স্টেটমেন্টের সাহায্যে প্রদর্শিত হয়।

উপরের কোডটি কার্যকর করার মাধ্যমে আমরা এই আউটপুটটি পেয়েছি, 10টি পূর্ণসংখ্যার বিভিন্ন মান রয়েছে।

উদাহরণ:

এই পরিস্থিতিতে, আমরা একজন ছাত্রের গড় স্কোর এবং ক্লাসে সে কত শতাংশ পেয়েছে তা খুঁজে বের করতে চলেছি।

প্রথমে, আপনাকে একটি লাইব্রেরি যোগ করতে হবে যা C++ প্রোগ্রামে প্রাথমিক সহায়তা প্রদান করবে। এর পরে, আমরা 'স্কোর' নামের অ্যারের আকার 5 উল্লেখ করছি। তারপরে, আমরা ডেটাটাইপ ফ্লোটের একটি পরিবর্তনশীল 'সমষ্টি' শুরু করেছি। প্রতিটি বিষয়ের স্কোর ম্যানুয়ালি ব্যবহারকারীর কাছ থেকে নেওয়া হয়। তারপর, অন্তর্ভুক্ত সমস্ত বিষয়ের গড় এবং শতাংশ খুঁজে বের করার জন্য একটি 'ফর' লুপ ব্যবহার করা হয়। অ্যারে এবং ‘ফর’ লুপ ব্যবহার করে যোগফল পাওয়া যায়। তারপর, গড় ফর্মুলা ব্যবহার করে গড় পাওয়া যায়। গড় খুঁজে বের করার পর, আমরা এর মানটি শতাংশে পাস করছি যা শতাংশ পেতে সূত্রে যোগ করা হয়। গড় এবং শতাংশ তারপর গণনা এবং প্রদর্শিত হয়.

এটি চূড়ান্ত আউটপুট যেখানে প্রতিটি বিষয়ের জন্য ব্যবহারকারীর কাছ থেকে পৃথকভাবে স্কোর নেওয়া হয় এবং গড় এবং শতাংশ যথাক্রমে গণনা করা হয়।

অ্যারে ব্যবহার করার সুবিধা:

  • অ্যারের আইটেমগুলি অ্যাক্সেস করা সহজ কারণ তাদের জন্য নির্ধারিত সূচক নম্বর।
  • আমরা সহজেই একটি অ্যারের মাধ্যমে অনুসন্ধান অপারেশন সম্পাদন করতে পারি।
  • আপনি যদি প্রোগ্রামিং-এ জটিলতা চান, আপনি একটি 2-মাত্রিক অ্যারে ব্যবহার করতে পারেন যা ম্যাট্রিক্সের বৈশিষ্ট্যও করে।
  • একই ধরনের ডেটাটাইপ আছে এমন একাধিক মান সঞ্চয় করতে, একটি অ্যারে সহজেই ব্যবহার করা যেতে পারে।

অ্যারে ব্যবহার করার অসুবিধা:

  • অ্যারেগুলির একটি নির্দিষ্ট আকার রয়েছে।
  • অ্যারে সমজাতীয় যার মানে শুধুমাত্র একটি একক ধরনের মান সংরক্ষণ করা হয়।
  • অ্যারেগুলি পৃথকভাবে শারীরিক মেমরিতে ডেটা সঞ্চয় করে।
  • সন্নিবেশ এবং মুছে ফেলার প্রক্রিয়া অ্যারের জন্য সহজ নয়।

C++ অবজেক্ট এবং ক্লাস:

C++ হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ, যার মানে হল C++ এ বস্তুগুলি গুরুত্বপূর্ণ ভূমিকা পালন করে। অবজেক্ট সম্পর্কে কথা বলতে গেলে প্রথমেই অবজেক্ট কী তা বিবেচনা করতে হবে, তাই একটি অবজেক্ট ক্লাসের যেকোন উদাহরণ। যেহেতু C++ OOP-এর ধারণা নিয়ে কাজ করছে, সেহেতু আলোচনার প্রধান বিষয় হল অবজেক্ট এবং ক্লাস। ক্লাসগুলি আসলে এমন ডেটাটাইপ যা ব্যবহারকারী নিজেই সংজ্ঞায়িত করে এবং ডেটা সদস্যদের এনক্যাপসুলেট করার জন্য মনোনীত করা হয় এবং যে ফাংশনগুলি শুধুমাত্র অ্যাক্সেসযোগ্য সেই নির্দিষ্ট ক্লাসের জন্য উদাহরণ তৈরি করা হয়। ডেটা সদস্য হল ভেরিয়েবল যা ক্লাসের ভিতরে সংজ্ঞায়িত করা হয়।



অন্য কথায় ক্লাস হল একটি রূপরেখা বা নকশা যা ডেটা সদস্যদের সংজ্ঞা এবং ঘোষণা এবং সেই ডেটা সদস্যদের জন্য নির্ধারিত ফাংশনের জন্য দায়ী। ক্লাসে ঘোষিত প্রতিটি বস্তু ক্লাসের দ্বারা প্রদর্শিত সমস্ত বৈশিষ্ট্য বা ফাংশন ভাগ করতে সক্ষম হবে।

ধরুন, পাখি নামে একটি শ্রেণী আছে, এখন শুরুতে সব পাখিই উড়তে পারত এবং ডানা মেলে। অতএব, উড়ন্ত একটি আচরণ যা এই পাখিরা গ্রহণ করে এবং ডানাগুলি তাদের শরীরের অংশ বা একটি মৌলিক বৈশিষ্ট্য।







একটি ক্লাস সংজ্ঞায়িত করা:

একটি ক্লাস সংজ্ঞায়িত করার জন্য, আপনাকে সিনট্যাক্স অনুসরণ করতে হবে এবং আপনার ক্লাস অনুযায়ী এটি পুনরায় সেট করতে হবে। কীওয়ার্ড 'ক্লাস' ক্লাসটি সংজ্ঞায়িত করার জন্য ব্যবহৃত হয় এবং অন্যান্য সমস্ত ডেটা সদস্য এবং ফাংশনগুলি ক্লাসের সংজ্ঞা দ্বারা অনুসরণ করা কোঁকড়া বন্ধনীর ভিতরে সংজ্ঞায়িত করা হয়।





ক্লাসের নামOfClass

{

অ্যাক্সেস স্পেসিফায়ার :

ডেটা সদস্য ;

ডেটা সদস্য ফাংশন ( ) ;

} ;

বস্তু ঘোষণা করা:

একটি ক্লাস সংজ্ঞায়িত করার শীঘ্রই, ক্লাস দ্বারা নির্দিষ্ট করা ফাংশনগুলি অ্যাক্সেস এবং সংজ্ঞায়িত করার জন্য আমাদের অবজেক্ট তৈরি করতে হবে। তার জন্য, আমাদের ক্লাসের নাম লিখতে হবে এবং তারপরে ঘোষণার জন্য বস্তুর নাম লিখতে হবে।



ডেটা সদস্যদের অ্যাক্সেস করা:

একটি সাধারণ ডট ‘.’ অপারেটরের সাহায্যে ফাংশন এবং ডেটা সদস্যদের অ্যাক্সেস করা হয়। পাবলিক ডেটা সদস্যদেরও এই অপারেটরের সাথে অ্যাক্সেস করা হয় তবে ব্যক্তিগত ডেটা সদস্যদের ক্ষেত্রে, আপনি সরাসরি তাদের অ্যাক্সেস করতে পারবেন না। ডেটা সদস্যদের অ্যাক্সেস ব্যক্তিগত, সর্বজনীন বা সুরক্ষিত অ্যাক্সেস মডিফায়ারদের দ্বারা তাদের দেওয়া অ্যাক্সেস নিয়ন্ত্রণের উপর নির্ভর করে। এখানে একটি দৃশ্যকল্প যা প্রদর্শন করে যে কীভাবে সাধারণ ক্লাস, ডেটা সদস্য এবং ফাংশন ঘোষণা করতে হয়।











উদাহরণ:

এই উদাহরণে, আমরা কয়েকটি ফাংশন সংজ্ঞায়িত করতে যাচ্ছি এবং অবজেক্টের সাহায্যে ক্লাস ফাংশন এবং ডেটা সদস্যদের অ্যাক্সেস করতে যাচ্ছি।



প্রথম ধাপে, আমরা লাইব্রেরি সংহত করছি যার পরে আমাদের সমর্থনকারী ডিরেক্টরি অন্তর্ভুক্ত করতে হবে। কল করার আগে ক্লাসটি স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে প্রধান() ফাংশন এই শ্রেণীকে 'যানবাহন' বলা হয়। ডেটা মেম্বাররা ছিল 'গাড়ির নাম' এবং সেই গাড়ির 'আইডি', যা যথাক্রমে একটি স্ট্রিংযুক্ত গাড়ির প্লেট নম্বর এবং int ডেটাটাইপ। এই দুই ডেটা সদস্যের জন্য দুটি ফাংশন ঘোষণা করা হয়। দ্য আইডি() ফাংশন গাড়ির আইডি প্রদর্শন করে। যেহেতু ক্লাসের ডেটা সদস্যরা সর্বজনীন, তাই আমরা ক্লাসের বাইরেও তাদের অ্যাক্সেস করতে পারি। অতএব, আমরা কল করছি নাম() ক্লাসের বাইরে ফাংশন করুন এবং তারপর ব্যবহারকারীর কাছ থেকে 'VehicleName'-এর মান নিয়ে পরবর্তী ধাপে এটি প্রিন্ট করুন। মধ্যে প্রধান() ফাংশন, আমরা প্রয়োজনীয় ক্লাসের একটি অবজেক্ট ঘোষণা করছি যা ক্লাস থেকে ডেটা সদস্য এবং ফাংশন অ্যাক্সেস করতে সহায়তা করবে। আরও, আমরা গাড়ির নাম এবং তার আইডির মানগুলি শুরু করছি, শুধুমাত্র যদি ব্যবহারকারী গাড়ির নামের জন্য মান না দেয়।

এটি প্রাপ্ত আউটপুট যখন ব্যবহারকারী নিজেই গাড়ির নাম দেয় এবং নম্বর প্লেটগুলি এটিকে নির্ধারিত স্ট্যাটিক মান।

সদস্য ফাংশনগুলির সংজ্ঞা সম্পর্কে কথা বলতে গেলে, একজনকে অবশ্যই বুঝতে হবে যে ক্লাসের ভিতরে ফাংশনটি সংজ্ঞায়িত করা সর্বদা বাধ্যতামূলক নয়। আপনি উপরের উদাহরণে দেখতে পাচ্ছেন, আমরা ক্লাসের বাইরে ক্লাসের ফাংশনটি সংজ্ঞায়িত করছি কারণ ডেটা সদস্যদের সর্বজনীনভাবে ঘোষণা করা হয় এবং এটি '::' নামের সাথে দেখানো স্কোপ রেজোলিউশন অপারেটরের সাহায্যে করা হয়। ক্লাস এবং ফাংশনের নাম।

C++ কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর:

আমরা উদাহরণের সাহায্যে এই বিষয়টির একটি পুঙ্খানুপুঙ্খ দৃষ্টিভঙ্গি করতে যাচ্ছি। C++ প্রোগ্রামিং-এ অবজেক্ট মুছে ফেলা এবং তৈরি করা খুবই গুরুত্বপূর্ণ। এর জন্য, যখনই আমরা একটি ক্লাসের জন্য একটি উদাহরণ তৈরি করি, আমরা স্বয়ংক্রিয়ভাবে কিছু ক্ষেত্রে কনস্ট্রাক্টর পদ্ধতিগুলিকে কল করি।

নির্মাণকারী:

নামটি ইঙ্গিত করে, একটি কনস্ট্রাক্টর শব্দটি 'নির্মাণ' থেকে উদ্ভূত হয়েছে যা কিছু সৃষ্টিকে নির্দিষ্ট করে। সুতরাং, একটি কনস্ট্রাক্টরকে নতুন তৈরি করা ক্লাসের একটি প্রাপ্ত ফাংশন হিসাবে সংজ্ঞায়িত করা হয় যা ক্লাসের নাম ভাগ করে। এবং এটি ক্লাসে অন্তর্ভুক্ত বস্তুর প্রাথমিককরণের জন্য ব্যবহার করা হয়। এছাড়াও, একটি কনস্ট্রাক্টরের নিজের জন্য একটি রিটার্ন মান নেই যার মানে হল যে এটির রিটার্ন টাইপ এমনকি বাতিলও হবে না। যুক্তিগুলি গ্রহণ করা বাধ্যতামূলক নয়, তবে প্রয়োজনে সেগুলি যুক্ত করতে পারেন। কনস্ট্রাক্টররা একটি ক্লাসের অবজেক্টে মেমরি বরাদ্দ করতে এবং সদস্য ভেরিয়েবলের জন্য প্রাথমিক মান সেট করতে কার্যকর। অবজেক্টটি শুরু হওয়ার পরে প্রাথমিক মানটি কনস্ট্রাক্টর ফাংশনে আর্গুমেন্ট আকারে পাস করা যেতে পারে।

বাক্য গঠন:

NameOfTheClass ( )
{
// কনস্ট্রাক্টরের শরীর
}

কনস্ট্রাক্টর প্রকার:

প্যারামিটারাইজড কনস্ট্রাক্টর:

যেমনটি আগে আলোচনা করা হয়েছে, একজন কনস্ট্রাক্টরের কোনো প্যারামিটার নেই তবে কেউ তাদের পছন্দের একটি প্যারামিটার যোগ করতে পারে। এটি তৈরি করার সময় এটি বস্তুর মান শুরু করবে। এই ধারণাটি আরও ভালভাবে বোঝার জন্য, নিম্নলিখিত উদাহরণটি বিবেচনা করুন:

উদাহরণ:

এই উদাহরণে, আমরা ক্লাসের একটি কনস্ট্রাক্টর তৈরি করব এবং প্যারামিটার ঘোষণা করব।

আমরা প্রথম ধাপেই হেডার ফাইলটি অন্তর্ভুক্ত করছি। একটি নেমস্পেস ব্যবহার করার পরবর্তী ধাপ হল প্রোগ্রামে সমর্থনকারী ডিরেক্টরি। 'ডিজিট' নামে একটি ক্লাস ঘোষণা করা হয় যেখানে প্রথমে, ভেরিয়েবলগুলিকে সর্বজনীনভাবে আরম্ভ করা হয় যাতে তারা পুরো প্রোগ্রাম জুড়ে অ্যাক্সেসযোগ্য হতে পারে। ডেটাটাইপ পূর্ণসংখ্যা সহ 'dig1' নামের একটি ভেরিয়েবল ঘোষণা করা হয়েছে। এর পরে, আমরা একটি কন্সট্রাক্টর ঘোষণা করেছি যার নাম ক্লাসের নামের সাথে মিল রয়েছে। এই কনস্ট্রাক্টরের একটি পূর্ণসংখ্যা ভেরিয়েবল আছে এটিকে 'n' হিসাবে পাস করা হয়েছে এবং ক্লাস ভেরিয়েবল 'dig1' n এর সমান সেট করা হয়েছে। মধ্যে প্রধান() প্রোগ্রামের ফাংশন, ক্লাস 'ডিজিট'-এর জন্য তিনটি অবজেক্ট তৈরি করা হয় এবং কিছু এলোমেলো মান নির্ধারণ করা হয়। এই অবজেক্টগুলিকে স্বয়ংক্রিয়ভাবে একই মান দিয়ে বরাদ্দ করা ক্লাস ভেরিয়েবলগুলিকে কল করার জন্য ব্যবহার করা হয়।

পূর্ণসংখ্যার মানগুলি আউটপুট হিসাবে স্ক্রিনে উপস্থাপিত হয়।

কপি কনস্ট্রাক্টর:

এটি কনস্ট্রাক্টরের ধরন যা বস্তুগুলিকে আর্গুমেন্ট হিসাবে বিবেচনা করে এবং একটি বস্তুর ডেটা সদস্যদের মান অন্যটির সাথে নকল করে। অতএব, এই কনস্ট্রাক্টরগুলিকে একটি বস্তু থেকে অন্যটি ঘোষণা এবং শুরু করার জন্য ব্যবহার করা হয়। এই প্রক্রিয়াটিকে কপি ইনিশিয়ালাইজেশন বলা হয়।

উদাহরণ:

এই ক্ষেত্রে, কপি কনস্ট্রাক্টর ঘোষণা করা হবে।

প্রথমত, আমরা লাইব্রেরি এবং ডিরেক্টরি একত্রিত করছি। 'নতুন' নামে একটি ক্লাস ঘোষণা করা হয় যেখানে পূর্ণসংখ্যাগুলিকে 'e' এবং 'o' হিসাবে আরম্ভ করা হয়। কনস্ট্রাক্টরকে সর্বজনীন করা হয় যেখানে দুটি ভেরিয়েবলের মান নির্ধারণ করা হয় এবং এই ভেরিয়েবলগুলি ক্লাসে ঘোষণা করা হয়। তারপর, এই মানগুলির সাহায্যে প্রদর্শিত হয় প্রধান() রিটার্ন টাইপ হিসাবে 'int' সহ ফাংশন। দ্য প্রদর্শন() ফাংশন কল করা হয় এবং পরে সংজ্ঞায়িত করা হয় যেখানে সংখ্যাগুলি স্ক্রিনে প্রদর্শিত হয়। ভিতরে প্রধান() ফাংশন, অবজেক্ট তৈরি করা হয় এবং এই বরাদ্দ করা অবজেক্টগুলি র্যান্ডম মান দিয়ে শুরু হয় এবং তারপরে প্রদর্শন() পদ্ধতি ব্যবহার করা হয়।

কপি কনস্ট্রাক্টরের ব্যবহার দ্বারা প্রাপ্ত আউটপুট নীচে প্রকাশ করা হয়েছে।

ধ্বংসকারী:

নামটি সংজ্ঞায়িত করে ধ্বংসকারীরা কনস্ট্রাক্টর দ্বারা তৈরি বস্তুগুলিকে ধ্বংস করতে ব্যবহৃত হয়। কনস্ট্রাক্টরদের সাথে তুলনীয়, ডেস্ট্রাক্টরদের ক্লাসের অভিন্ন নাম আছে কিন্তু একটি অতিরিক্ত টিল্ড (~) অনুসরণ করা হয়েছে।

বাক্য গঠন:

~ নতুন ( )
{
}

ধ্বংসকারী কোনো যুক্তি গ্রহণ করে না এবং এমনকি কোনো রিটার্ন মানও নেই। কম্পাইলার পরোক্ষভাবে ক্লিন-আপ স্টোরেজের জন্য প্রোগ্রাম থেকে প্রস্থান করার আবেদন করে যা আর অ্যাক্সেসযোগ্য নয়।

উদাহরণ:

এই পরিস্থিতিতে, আমরা একটি অবজেক্ট মুছে ফেলার জন্য একটি ধ্বংসকারী ব্যবহার করছি।

এখানে একটি 'জুতা' ক্লাস করা হয়। একটি কন্সট্রাক্টর তৈরি করা হয়েছে যার নাম ক্লাসের মতো। কনস্ট্রাক্টরে, একটি বার্তা প্রদর্শিত হয় যেখানে বস্তুটি তৈরি করা হয়। কনস্ট্রাক্টরের পরে, ডেস্ট্রক্টর তৈরি করা হয় যা কনস্ট্রাক্টরের সাথে তৈরি করা বস্তুগুলিকে মুছে ফেলছে। মধ্যে প্রধান() ফাংশন, 's' নামে একটি পয়েন্টার অবজেক্ট তৈরি করা হয় এবং এই বস্তুটি মুছে ফেলার জন্য একটি কীওয়ার্ড 'ডিলিট' ব্যবহার করা হয়।

এটি সেই আউটপুট যা আমরা প্রোগ্রাম থেকে পেয়েছি যেখানে ডেস্ট্রাক্টর তৈরি করা অবজেক্টকে পরিষ্কার এবং ধ্বংস করছে।

কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের মধ্যে পার্থক্য:

কনস্ট্রাক্টর ধ্বংসকারী
ক্লাসের উদাহরণ তৈরি করে। ক্লাসের উদাহরণ ধ্বংস করে।
এটি ক্লাস নামের বরাবর যুক্তি আছে. এটির কোন যুক্তি বা পরামিতি নেই
অবজেক্ট তৈরি হলে বলা হয়। বস্তুটি ধ্বংস হলে বলা হয়।
বস্তুতে মেমরি বরাদ্দ করে। বস্তুর মেমরি ডিঅ্যালোকেট করে।
ওভারলোড করা যেতে পারে। ওভারলোড করা যাবে না।

C++ উত্তরাধিকার:

এখন, আমরা C++ ইনহেরিটেন্স এবং এর স্কোপ সম্পর্কে জানব।

উত্তরাধিকার হল এমন একটি পদ্ধতি যার মাধ্যমে একটি নতুন শ্রেণী তৈরি হয় বা বিদ্যমান শ্রেণী থেকে অবতীর্ণ হয়। বর্তমান শ্রেণীটিকে 'বেস ক্লাস' বা 'প্যারেন্ট ক্লাস' হিসাবে আখ্যায়িত করা হয় এবং যে নতুন শ্রেণীটি তৈরি হয় তাকে 'উত্পন্ন শ্রেণী' হিসাবে আখ্যায়িত করা হয়। যখন আমরা বলি যে একটি শিশু শ্রেণী একটি পিতামাতার শ্রেণী থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয় তার মানে হল যে শিশুটি পিতামাতার শ্রেণীর সমস্ত বৈশিষ্ট্যের অধিকারী।

উত্তরাধিকার একটি (একটি) সম্পর্ককে বোঝায়। যে কোনো সম্পর্ককে আমরা উত্তরাধিকার বলি যদি দুটি শ্রেণীর মধ্যে 'is-a' ব্যবহার করা হয়।

উদাহরণ স্বরূপ:

  • তোতা পাখি।
  • একটি কম্পিউটার একটি মেশিন।

বাক্য গঠন:

C++ প্রোগ্রামিং-এ আমরা ইনহেরিটেন্স ব্যবহার বা লিখি:

ক্লাস < উদ্ভূত - ক্লাস >: < অ্যাক্সেস - স্পেসিফায়ার < ভিত্তি - ক্লাস >

C++ উত্তরাধিকারের মোড:

উত্তরাধিকারে ক্লাসের উত্তরাধিকারের জন্য 3টি মোড জড়িত:

  • সর্বজনীন: এই মোডে, যদি একটি শিশু শ্রেণী ঘোষণা করা হয় তাহলে একটি অভিভাবক শ্রেণীর সদস্যরা শিশু শ্রেণীর দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত হয় যেমন একটি অভিভাবক শ্রেণীতে।
  • সুরক্ষিত: আমি এই মোডে, অভিভাবক শ্রেণীর পাবলিক সদস্যরা শিশু শ্রেণিতে সুরক্ষিত সদস্য হয়ে যায়।
  • ব্যক্তিগত : এই মোডে, একটি অভিভাবক শ্রেণীর সমস্ত সদস্য শিশু শ্রেণিতে ব্যক্তিগত হয়ে যায়৷

C++ উত্তরাধিকারের ধরন:

নিচে C++ উত্তরাধিকারের ধরন রয়েছে:

1. একক উত্তরাধিকার:

এই ধরনের উত্তরাধিকারের সাথে, একটি বেস ক্লাস থেকে শ্রেণীগুলি উদ্ভূত হয়েছিল।

বাক্য গঠন:

ক্লাস এম
{
শরীর
} ;
ক্লাস এন : পাবলিক এম
{
শরীর
} ;

2. একাধিক উত্তরাধিকার:

এই ধরণের উত্তরাধিকারে, একটি শ্রেণী বিভিন্ন বেস ক্লাস থেকে নেমে আসতে পারে।

বাক্য গঠন:

ক্লাস এম

{

শরীর

} ;

ক্লাস এন

{

শরীর

} ;

ক্লাস O : পাবলিক এম , পাবলিক এন

{

শরীর

} ;

3. বহুস্তরীয় উত্তরাধিকার:

উত্তরাধিকারের এই ফর্মে একটি শিশু শ্রেণি অন্য শিশু শ্রেণি থেকে এসেছে।

বাক্য গঠন:

ক্লাস এম

{

শরীর

} ;

ক্লাস এন : পাবলিক এম

{

শরীর

} ;

ক্লাস O : পাবলিক এন

{

শরীর

} ;

4. অনুক্রমিক উত্তরাধিকার:

উত্তরাধিকারের এই পদ্ধতিতে একটি বেস ক্লাস থেকে বেশ কয়েকটি সাবক্লাস তৈরি করা হয়।

বাক্য গঠন:

ক্লাস এম

{

শরীর

} ;

ক্লাস এন : পাবলিক এম

{

শরীর

} ;

ক্লাস O : পাবলিক এম

{

} ;

5. হাইব্রিড উত্তরাধিকার:

এই ধরনের উত্তরাধিকারে, একাধিক উত্তরাধিকার একত্রিত হয়।

বাক্য গঠন:

ক্লাস এম

{

শরীর

} ;

ক্লাস এন : পাবলিক এম

{

শরীর

} ;

ক্লাস O

{

শরীর

} ;

ক্লাস পি : পাবলিক এন , পাবলিক হে

{

শরীর

} ;

উদাহরণ:

আমরা C++ প্রোগ্রামিং-এ একাধিক উত্তরাধিকারের ধারণা প্রদর্শন করতে কোডটি চালাতে যাচ্ছি।

যেহেতু আমরা একটি স্ট্যান্ডার্ড ইনপুট-আউটপুট লাইব্রেরি দিয়ে শুরু করেছি, তারপরে আমরা বেস ক্লাসের নাম দিয়েছি 'পাখি' এবং এটিকে সর্বজনীন করেছি যাতে এর সদস্যরা অ্যাক্সেসযোগ্য হতে পারে। তারপরে, আমাদের বেস ক্লাস 'রেপটাইল' আছে এবং আমরা এটিকে সর্বজনীনও করেছি। তারপরে, আউটপুট প্রিন্ট করার জন্য আমাদের 'cout' আছে। এর পরে, আমরা একটি শিশু-শ্রেণীর 'পেঙ্গুইন' তৈরি করি। মধ্যে প্রধান() ফাংশন আমরা ক্লাস পেঙ্গুইন 'p1' অবজেক্ট করেছি। প্রথমে, 'পাখি' শ্রেণীটি কার্যকর করবে এবং তারপরে 'সরীসৃপ' শ্রেণী।

C++-এ কোড এক্সিকিউট করার পর, আমরা বেস ক্লাস 'Bird' এবং 'Reptile'-এর আউটপুট স্টেটমেন্ট পাই। এর অর্থ হল একটি শ্রেণী 'পেঙ্গুইন' বেস ক্লাস 'পাখি' এবং 'সরীসৃপ' থেকে উদ্ভূত কারণ একটি পেঙ্গুইন একটি পাখির পাশাপাশি একটি সরীসৃপ। এটি হামাগুড়ি দেওয়ার পাশাপাশি উড়তে পারে। তাই একাধিক উত্তরাধিকার প্রমাণ করে যে একটি শিশু শ্রেণী অনেক বেস ক্লাস থেকে উদ্ভূত হতে পারে।

উদাহরণ:

এখানে আমরা মাল্টিলেভেল ইনহেরিট্যান্স কিভাবে ব্যবহার করতে হয় তা দেখানোর জন্য একটি প্রোগ্রাম এক্সিকিউট করব।

আমরা ইনপুট-আউটপুট স্ট্রীম ব্যবহার করে আমাদের প্রোগ্রাম শুরু করেছি। তারপর, আমরা একটি অভিভাবক শ্রেণী 'M' ঘোষণা করেছি যা সর্বজনীন হতে সেট করা হয়েছে। আমরা ডেকেছি প্রদর্শন() বিবৃতি প্রদর্শন করার জন্য ফাংশন এবং 'cout' কমান্ড। এর পরে, আমরা একটি চাইল্ড ক্লাস 'N' তৈরি করেছি যা প্যারেন্ট ক্লাস 'M' থেকে উদ্ভূত হয়েছে। আমাদের কাছে চাইল্ড ক্লাস 'N' থেকে প্রাপ্ত একটি নতুন চাইল্ড ক্লাস 'O' আছে এবং উভয় প্রাপ্ত ক্লাসের বডি খালি। শেষ পর্যন্ত, আমরা আহ্বান জানাই প্রধান() যে ফাংশনটিতে আমাদের ক্লাস 'O' এর অবজেক্ট শুরু করতে হবে। দ্য প্রদর্শন() বস্তুর ফাংশন ফলাফল প্রদর্শনের জন্য ব্যবহার করা হয়।

এই চিত্রে, আমাদের ক্লাস 'M'-এর ফলাফল রয়েছে যা মূল শ্রেণী কারণ আমাদের a ছিল প্রদর্শন() এতে ফাংশন। সুতরাং, ক্লাস 'N' প্যারেন্ট ক্লাস 'M' থেকে এবং ক্লাস 'O' প্যারেন্ট ক্লাস 'N' থেকে উদ্ভূত হয়েছে যা বহুস্তরীয় উত্তরাধিকারকে বোঝায়।

সি++ পলিমরফিজম:

'পলিমরফিজম' শব্দটি দুটি শব্দের সমষ্টিকে উপস্থাপন করে 'পলি' এবং ' রূপচর্চা' . 'পলি' শব্দটি 'অনেক' এবং 'মর্ফিজম' 'রূপ' প্রতিনিধিত্ব করে। পলিমরফিজমের অর্থ হল একটি বস্তু বিভিন্ন পরিস্থিতিতে ভিন্নভাবে আচরণ করতে পারে। এটি একটি প্রোগ্রামারকে কোডটি পুনরায় ব্যবহার এবং প্রসারিত করার অনুমতি দেয়। একই কোড শর্ত অনুযায়ী ভিন্নভাবে কাজ করে। একটি বস্তুর আইনীকরণ চালানোর সময় নিযুক্ত করা যেতে পারে.

পলিমরফিজমের বিভাগগুলি:

পলিমরফিজম প্রধানত দুটি পদ্ধতিতে ঘটে:

  1. টাইম পলিমরফিজম কম্পাইল করুন
  2. রান টাইম পলিমরফিজম

ব্যাখ্যা করা যাক।

6. কম্পাইল টাইম পলিমরফিজম:

এই সময়ের মধ্যে, প্রবেশ করা প্রোগ্রামটি একটি এক্সিকিউটেবল প্রোগ্রামে পরিবর্তিত হয়। কোড স্থাপনের আগে, ত্রুটিগুলি সনাক্ত করা হয়। এর প্রাথমিকভাবে দুটি শ্রেণী রয়েছে।

  • ফাংশন ওভারলোডিং
  • অপারেটর ওভারলোডিং

আসুন আমরা এই দুটি বিভাগকে কীভাবে ব্যবহার করি তা দেখুন।

7. ফাংশন ওভারলোডিং:

এর মানে একটি ফাংশন বিভিন্ন কাজ সম্পাদন করতে পারে। একই নামের কিন্তু স্বতন্ত্র আর্গুমেন্ট সহ একাধিক ফাংশন থাকলে ফাংশনগুলিকে ওভারলোড করা হয়।

প্রথমত, আমরা লাইব্রেরি পাশাপাশি স্ট্যান্ডার্ড নেমস্পেস ব্যবহার করি। তারপর আমরা ব্যবহারকারী-সংজ্ঞায়িত ক্লাস 'যোগ' ঘোষণা করব। ক্লাসের ভিতরে, আমরা পাবলিক হিসাবে দুটি প্যারামিটার সহ একটি ফাংশন ADD() সংজ্ঞায়িত করি। আবার, একই নামের সাথে ক্লাসের বডির ভিতরে একটি নতুন ফাংশন ঘোষণা করুন কিন্তু এই ফাংশনের কোন প্যারামিটার নেই। এখানে আমরা তিনটি স্ট্রিং শুরু করি। প্রথম দুটি স্ট্রিংয়ের কিছু মান রয়েছে এবং শেষ স্ট্রিংটি প্রথম দুটি স্ট্রিংকে সংযুক্ত করতে ব্যবহৃত হয়। আমরা ফলাফল প্রিন্ট করতে 'cout' কমান্ডটি ব্যবহার করি। পরবর্তী, আমরা কল প্রধান() ক্লাসের বাইরে পদ্ধতি। আমরা প্রয়োজনীয় ক্লাস 'অ্যাড'-এর একটি অবজেক্ট তৈরি করি। এখন, আমরা প্রথম ফাংশনটিকে দুটি প্যারামিটার সহ কল ​​করি এবং তারপরে দ্বিতীয় ফাংশনটিকেও কল করি। শেষ ধাপে, আমরা প্রোগ্রামটি শেষ করতে 'রিটার্ন 0' বিবৃতি অন্তর্ভুক্ত করি।

অপারেটর ওভারলোডিং:

একটি অপারেটরের একাধিক কার্যকারিতা সংজ্ঞায়িত করার প্রক্রিয়াটিকে অপারেটর ওভারলোডিং বলা হয়।

উপরের উদাহরণে হেডার ফাইল অন্তর্ভুক্ত রয়েছে। তারপর, আমরা একটি আদর্শ নামস্থান ব্যবহার করছি। আমরা ক্লাস 'পূর্ণসংখ্যা' সংজ্ঞায়িত করি। এই ক্লাসের মধ্যে, আমরা ক্লাসের ব্যক্তিগত সদস্য হিসাবে একটি পূর্ণসংখ্যা নির্দিষ্ট করি। এর পরে, আমরা প্যারামিটারাইজড কনস্ট্রাক্টরকে একটি পাবলিক সদস্য হিসাবে ঘোষণা করি এবং এতে পূর্ণসংখ্যার মান শুরু করি। আমরা একটি ওভারলোডিং প্রিফিক্স অপারেটর সহ একটি কনস্ট্রাক্টরকে সংজ্ঞায়িত করি। এই কনস্ট্রাক্টরের ভিতরে, আমরা প্রিফিক্স অপারেশন সঞ্চালন করি। তাছাড়া, আমরা একটি ফাংশন তৈরি করি যা 'cout' স্টেটমেন্ট ব্যবহার করে ইনক্রিমেন্ট মান প্রদর্শন করে। এদিকে, আমরা আহ্বান জানাই প্রধান() ফাংশন এখানে, আমরা দুটি ক্লাস অবজেক্ট তৈরি করি। প্রথম বস্তুটি পূর্ণসংখ্যার একটি মান পাস করে। তারপর, 'মূল্য বৃদ্ধির আগে' লাইনটি প্রিন্ট করতে 'cout' বিবৃতিটি ব্যবহার করুন। পরবর্তী, আমরা কল প্রদর্শন() প্রথম বস্তুর জন্য ফাংশন। দ্বিতীয় অবজেক্টটি প্রি-ইনক্রিমেন্ট অপারেটর ব্যবহার করে। 'প্রি-ইনক্রিমেন্টের পরে মান হল' লাইনটি দেখানোর জন্য আমরা 'cout' কমান্ড ব্যবহার করি। তারপর, আমরা ব্যবহার প্রদর্শন() দ্বিতীয় বস্তুর জন্য ফাংশন।

8. রান টাইম পলিমরফিজম:

এটি সেই সময়ের ব্যবধান যেখানে কোডটি চলে। কোডের নিয়োগের পরে, ত্রুটিগুলি সনাক্ত করা যেতে পারে।

ফাংশন ওভাররাইডিং:

এটি ঘটে যখন একটি প্রাপ্ত ক্লাস বেস ক্লাস সদস্য ফাংশনগুলির একটি হিসাবে একই ধরনের ফাংশন সংজ্ঞা ব্যবহার করে।

প্রথম লাইনে, ইনপুট এবং আউটপুট অপারেশন চালানোর জন্য আমরা লাইব্রেরি অন্তর্ভুক্ত করি। আরও, আমরা স্ট্যান্ডার্ড নেমস্পেস যোগ করি। পরের লাইনে, আমরা একটি অভিভাবক শ্রেণিকে 'মানুষ' ঘোষণা করি। ক্লাসের ভিতরে, আমরা পাবলিক হিসাবে দুটি প্যারামিটার সহ একটি ফাংশন সংজ্ঞায়িত করি। তারপর, আমরা 'হাঁটা' পাঠ্য প্রদর্শন করতে 'cout' বিবৃতি ব্যবহার করি। ক্লাসের বাইরে, আমরা একটি শিশু শ্রেণী তৈরি করি 'প্রাণী' যা অভিভাবক শ্রেণি থেকে উদ্ভূত। এখানে, আমরা একটি ফাংশন তৈরি করি যার নামটি আগে প্যারেন্ট ক্লাসে ঘোষণা করা হয়েছিল। তারপর, 'খাওয়া' পাঠ্যটি দেখানোর জন্য 'cout' বিবৃতিটি ব্যবহার করুন। আমরা ব্যবহার করি প্রধান() ফাংশন এদিকে, আমরা একটি ক্লাস অবজেক্ট 'm' তৈরি করি। তারপর, আমরা প্যারেন্ট ক্লাসের ফাংশনকে সেইসাথে চাইল্ড ক্লাসের ফাংশন বলি। 'রিটার্ন 0' কমান্ডটি ব্যবহার করুন।

C++ স্ট্রিংস:

এখন, আমরা আবিষ্কার করব কিভাবে C++ এ স্ট্রিং ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা যায়। প্রোগ্রামে অক্ষরগুলির একটি গ্রুপ সংরক্ষণ করতে স্ট্রিং ব্যবহার করা হয়। এটি প্রোগ্রামে বর্ণানুক্রমিক মান, অঙ্ক এবং বিশেষ ধরনের চিহ্ন সংরক্ষণ করে। এটি C++ প্রোগ্রামে একটি অ্যারে হিসাবে অক্ষর সংরক্ষিত করে। অ্যারেগুলি C++ প্রোগ্রামিং-এ একটি সংগ্রহ বা অক্ষরের সংমিশ্রণ সংরক্ষণ করতে ব্যবহৃত হয়। একটি নাল অক্ষর হিসাবে পরিচিত একটি বিশেষ চিহ্ন অ্যারেটি শেষ করতে ব্যবহৃত হয়। এটি এস্কেপ সিকোয়েন্স (\0) দ্বারা প্রতিনিধিত্ব করা হয় এবং এটি স্ট্রিং এর শেষ নির্দিষ্ট করতে ব্যবহৃত হয়।

'cin' কমান্ড ব্যবহার করে স্ট্রিং পান:

এটি একটি স্ট্রিং ভেরিয়েবল ইনপুট করতে ব্যবহৃত হয় এতে কোন ফাঁকা স্থান ছাড়াই। প্রদত্ত উদাহরণে, আমরা একটি C++ প্রোগ্রাম বাস্তবায়ন করি যা 'cin' কমান্ড ব্যবহার করে ব্যবহারকারীর নাম পায়।

প্রথম ধাপে, আমরা লাইব্রেরি ব্যবহার করি। ইতিমধ্যে, আমরা স্ট্যান্ডার্ড নেমস্পেস অন্তর্ভুক্ত করেছি। পরবর্তী, আমরা ঘোষণা প্রধান() ফাংশন আমরা একটি অক্ষর টাইপ স্ট্রিং এর শরীরের মধ্যে আরম্ভ প্রধান() ফাংশন তারপর, আমরা 'আপনার নাম লিখুন' প্রিন্ট করতে 'cout' বিবৃতি ব্যবহার করি। আমরা ব্যবহারকারীর কাছ থেকে স্ট্রিং জিজ্ঞাসা করতে 'cin' কমান্ডটি ব্যবহার করি। 'cout' কমান্ডটি ব্যবহারকারীর দ্বারা লিখিত নামটি প্রিন্ট করতে প্রয়োগ করা হয়। প্রোগ্রামটি বন্ধ করতে রিটার্ন 0 বিবৃতি যোগ করা হয়।

ব্যবহারকারী 'আহমেদ চৌধুরী' নামটি প্রবেশ করান। কিন্তু আমরা সম্পূর্ণ 'আহমেদ চৌধুরী' এর পরিবর্তে আউটপুট হিসাবে শুধুমাত্র 'আহমেদ' পাই কারণ 'সিন' কমান্ড ফাঁকা স্থান সহ একটি স্ট্রিং সংরক্ষণ করতে পারে না। এটি শুধুমাত্র স্থানের আগে মান সংরক্ষণ করে।

cin.get() ফাংশন ব্যবহার করে স্ট্রিং পান:

দ্য পাওয়া() cin কমান্ডের ফাংশনটি কীবোর্ড থেকে স্ট্রিং পেতে ব্যবহার করা হয় যাতে ফাঁকা স্থান থাকতে পারে।

উপরের উদাহরণে ইনপুট এবং আউটপুট অপারেশন করার জন্য লাইব্রেরি অন্তর্ভুক্ত রয়েছে। তারপর, আমরা একটি আদর্শ নামস্থান ব্যবহার করেছি। দ্য প্রধান() ফাংশন বলা হয়। এর পরে, আমরা 's' নামে একটি স্ট্রিং শুরু করি। পরবর্তী ধাপে, 'cout' কমান্ডটি 'এন্টার একটি স্ট্রিং' বিবৃতি প্রদর্শন করতে ব্যবহার করা হয়। দ্য cin.get() ব্যবহারকারীর কাছ থেকে স্ট্রিং পেতে প্রয়োগ করা হয়। ব্যবহার করে cin.get() ফাংশন আমরা একটি স্ট্রিং মান পাস করি এবং একটি প্যারামিটার হিসাবে স্ট্রিংয়ের আকার নির্দিষ্ট করি। প্রোগ্রামের আউটপুট প্রদর্শনের জন্য 'cout' কমান্ডটি আবার ব্যবহার করা হয়। শেষ পর্যন্ত, আমরা রিটার্ন 0 যোগ করি।

ব্যবহারকারীর দ্বারা 'মাই নেম ইজ আলী' একটি স্ট্রিং প্রবেশ করানো হয়েছে। আমরা ফলাফল হিসাবে সম্পূর্ণ স্ট্রিং 'মাই নেম ইজ আলি' পেয়েছি কারণ cin.get() ফাংশনটি স্ট্রিংগুলিকে গ্রহণ করে যাতে ফাঁকা স্থান রয়েছে।

2D (টু-ডাইমেনশনাল) অ্যারে অফ স্ট্রিং ব্যবহার করা:

এই ক্ষেত্রে, আমরা স্ট্রিংগুলির একটি 2D অ্যারে ব্যবহার করে ব্যবহারকারীর কাছ থেকে ইনপুট (তিনটি শহরের নাম) নিই।

প্রথমে, আমরা হেডার ফাইল এবং একটি স্ট্যান্ডার্ড নেমস্পেস সংহত করি। আমরা আহ্বান জানাই প্রধান() ফাংশন তারপর, আমরা তিনটি সারি এবং পনেরটি কলাম সহ অক্ষরগুলির একটি দ্বি-মাত্রিক অ্যারে শুরু করি। পরবর্তী ধাপে, নাল অক্ষর চিহ্নিত না হওয়া পর্যন্ত প্রয়োজনীয় স্ট্রিংটির উপর পুনরাবৃত্তি করতে ভেরিয়েবল 'i' গণনা করতে for loop ব্যবহার করা হয়। 'ফর' লুপের মূল অংশের ভিতরে, আমরা 'শহরের নাম লিখুন' লাইনটি দেখানোর জন্য 'cout' কমান্ডটি ব্যবহার করি। তারপর শহরের নাম পেতে 'cin' স্টেটমেন্ট ব্যবহার করুন। লুপ শেষ না হওয়া পর্যন্ত আমরা আবার একটি ক্রমানুসারে শহরগুলির নাম প্রদর্শন করতে আরেকটি 'ফর' লুপ এবং 'কাউট' বিবৃতি ব্যবহার করি। এরপরে, 'রিটার্ন 0' কমান্ড ব্যবহার করা হয়।

এখানে, ব্যবহারকারী তিনটি ভিন্ন শহরের নাম প্রবেশ করান। প্রোগ্রামটি তিনটি স্ট্রিং মান পেতে একটি সারি সূচক ব্যবহার করে। প্রতিটি মান তার নিজস্ব সারিতে রাখা হয়। প্রথম স্ট্রিং প্রথম সারিতে সংরক্ষণ করা হয় এবং তাই। সারি সূচক ব্যবহার করে প্রতিটি স্ট্রিং মান একইভাবে প্রদর্শিত হয়।

C++ স্ট্যান্ডার্ড লাইব্রেরি:

C++ লাইব্রেরি হল অনেকগুলি ফাংশন, ক্লাস, ধ্রুবক এবং সমস্ত সম্পর্কিত আইটেমগুলির একটি ক্লাস্টার বা গ্রুপিং যা প্রায় একটি সঠিক সেটে আবদ্ধ থাকে, সর্বদা প্রমিত হেডার ফাইলগুলিকে সংজ্ঞায়িত করে এবং ঘোষণা করে। এগুলোর বাস্তবায়নে দুটি নতুন হেডার ফাইল রয়েছে যেগুলি এবং নামে C++ স্ট্যান্ডার্ডের প্রয়োজন হয় না। বাধ্যতামূলক হেডার ফাইলগুলির একটি দীর্ঘ তালিকা উপস্থিত রয়েছে যা কম্পাইলারের প্রয়োজনীয়তার উপর নির্ভরশীল। হেডার ফাইলে হেডার তালিকা থাকে যেটিতে C++ স্ট্যান্ডার্ড লাইব্রেরির সমস্ত বিষয়বস্তু রয়েছে, যার মধ্যে স্ট্যান্ড লাইব্রেরি টেমপ্লেট (STL) এর জন্য নির্দিষ্ট হেডার ফাইল রয়েছে।

স্ট্যান্ডার্ড লাইব্রেরি প্রোগ্রামিং করার সময় নির্দেশাবলী পুনরায় লেখার তাড়াহুড়োকে সরিয়ে দেয়। এটির ভিতরে অনেকগুলি লাইব্রেরি রয়েছে যা অনেক ফাংশনের জন্য কোড সংরক্ষণ করে। এই লাইব্রেরিগুলির ভাল ব্যবহার করার জন্য হেডার ফাইলগুলির সাহায্যে তাদের লিঙ্ক করা বাধ্যতামূলক। যখন আমরা ইনপুট বা আউটপুট লাইব্রেরি ইম্পোর্ট করি, এর মানে হল আমরা সেই লাইব্রেরির ভিতরে সংরক্ষিত সমস্ত কোড ইম্পোর্ট করছি এবং এইভাবে আমরা এর মধ্যে থাকা ফাংশনগুলিকেও ব্যবহার করতে পারি অন্তর্নিহিত কোডগুলি লুকিয়ে রেখে যা আপনার প্রয়োজন নাও হতে পারে। দেখা.

C++ স্ট্যান্ডার্ড লাইব্রেরি নিম্নলিখিত দুটি ধরনের সমর্থন করে:

  • একটি হোস্ট করা বাস্তবায়ন যা C++ ISO স্ট্যান্ডার্ড দ্বারা বর্ণিত সমস্ত প্রয়োজনীয় স্ট্যান্ডার্ড লাইব্রেরি হেডার ফাইলের বিধান করে।
  • একটি স্বতন্ত্র বাস্তবায়ন যার জন্য শুধুমাত্র স্ট্যান্ডার্ড লাইব্রেরি থেকে হেডার ফাইলগুলির একটি অংশ প্রয়োজন৷ উপযুক্ত উপসেট হল:
(অন্তত ঘোষণা করা

পারমাণবিক_স্বাক্ষরিত_লক_মুক্ত এবং পারমাণবিক-স্বাক্ষরহীন_লক_মুক্ত)

<রেঞ্জ>
<বিট> (অন্তত অ্যাটেক্সিট ঘোষণা করা, বাতিল করা, এ_দ্রুত_প্রস্থান, প্রস্থান, দ্রুত_প্রস্থান) <অনুপাত>
<ব্যতিক্রম>
<কার্যকর> <টাইপইনফো>
<তুলনা> <উৎস_স্থান>
<ধারণা> <পুনরাবৃত্ত>
<করোটিন> <সীমা> <উপযোগিতা>
<নতুন>
<মেমরি> <সংস্করণ>

বিগত 11টি C++ আসার পর থেকে কয়েকটি হেডার ফাইলের নিন্দা করা হয়েছে: সেগুলো হল , এবং

হোস্ট করা এবং ফ্রিস্ট্যান্ডিং বাস্তবায়নের মধ্যে পার্থক্যগুলি নীচে চিত্রিত করা হয়েছে:

  • হোস্ট করা বাস্তবায়নে, আমাদের একটি গ্লোবাল ফাংশন ব্যবহার করতে হবে যা প্রধান ফাংশন। একটি ফ্রিস্ট্যান্ডিং বাস্তবায়নের সময়, ব্যবহারকারী নিজেই শুরু এবং শেষ ফাংশন ঘোষণা এবং সংজ্ঞায়িত করতে পারে।
  • একটি হোস্টিং ইমপ্লিমেন্টেশনের সাথে মিলে যাওয়া সময়ে একটি থ্রেড বাধ্যতামূলকভাবে চলতে থাকে। যেখানে, ফ্রিস্ট্যান্ডিং বাস্তবায়নে, বাস্তবায়নকারীরা নিজেরাই সিদ্ধান্ত নেবে তাদের লাইব্রেরিতে সমকালীন থ্রেডের সমর্থন প্রয়োজন কিনা।

প্রকার:

ফ্রিস্ট্যান্ডিং এবং হোস্ট উভয়ই C++ দ্বারা সমর্থিত। হেডার ফাইলগুলি নিম্নলিখিত দুটিতে বিভক্ত:

  • আইওস্ট্রিম অংশ
  • C++ STL অংশ (স্ট্যান্ডার্ড লাইব্রেরি)

যখনই আমরা C++-এ এক্সিকিউশনের জন্য একটি প্রোগ্রাম লিখি, আমরা সবসময় STL-এর ভিতরে কার্যকরী ফাংশনগুলিকে কল করি। এই পরিচিত ফাংশনগুলি দক্ষতার সাথে চিহ্নিত অপারেটর ব্যবহার করে ইনপুট এবং প্রদর্শন আউটপুট গ্রহণ করে।

ইতিহাস বিবেচনা করে, STL কে প্রাথমিকভাবে স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি বলা হত। তারপরে, STL লাইব্রেরির অংশগুলি তখন C++ এর স্ট্যান্ডার্ড লাইব্রেরিতে প্রমিত করা হয়েছিল যা আজকাল ব্যবহৃত হয়। এর মধ্যে রয়েছে আইএসও সি++ রানটাইম লাইব্রেরি এবং বুস্ট লাইব্রেরির কিছু অংশ যা অন্যান্য গুরুত্বপূর্ণ কার্যকারিতা সহ। মাঝে মাঝে STL বোঝায় কন্টেইনার বা আরও ঘন ঘন C++ স্ট্যান্ডার্ড লাইব্রেরির অ্যালগরিদম। এখন, এই STL বা স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি সম্পূর্ণভাবে পরিচিত C++ স্ট্যান্ডার্ড লাইব্রেরি সম্পর্কে কথা বলে।

std নেমস্পেস এবং হেডার ফাইল:

ফাংশন বা ভেরিয়েবলের সমস্ত ঘোষণা স্ট্যান্ডার্ড লাইব্রেরির মধ্যে হেডার ফাইলগুলির সাহায্যে করা হয় যা তাদের মধ্যে সমানভাবে বিতরণ করা হয়। আপনি হেডার ফাইলগুলি অন্তর্ভুক্ত না করলে ঘোষণাটি ঘটবে না।

ধরা যাক কেউ তালিকা এবং স্ট্রিং ব্যবহার করছে, তাকে নিম্নলিখিত হেডার ফাইল যোগ করতে হবে:

#include

# অন্তর্ভুক্ত করুন <তালিকা>

এই কৌণিক বন্ধনী '<>' নির্দেশ করে যে একজনকে অবশ্যই এই নির্দিষ্ট হেডার ফাইলটি সংজ্ঞায়িত এবং অন্তর্ভুক্ত করা ডিরেক্টরিতে দেখতে হবে। কেউ এই লাইব্রেরিতে একটি '.h' এক্সটেনশন যোগ করতে পারে যা প্রয়োজন বা ইচ্ছা হলে করা হয়। যদি আমরা '.h' লাইব্রেরিটি বাদ দেই, তাহলে ফাইলের নাম শুরু হওয়ার ঠিক আগে আমাদের একটি সংযোজন 'c' প্রয়োজন, ঠিক এই হেডার ফাইলটি একটি C লাইব্রেরির অন্তর্গত। উদাহরণস্বরূপ, আপনি হয় লিখতে পারেন (#include বা #include )।

নেমস্পেস সম্পর্কে কথা বলতে গেলে, পুরো C++ স্ট্যান্ডার্ড লাইব্রেরিটি এই নেমস্পেসের ভিতরে রয়েছে যা std হিসাবে চিহ্নিত করা হয়েছে। এই কারণেই প্রমিত লাইব্রেরির নামগুলি অবশ্যই ব্যবহারকারীদের দ্বারা দক্ষতার সাথে সংজ্ঞায়িত করা উচিত। উদাহরণ স্বরূপ:

মাধ্যমিক :: cout << 'এই পাস হবে !/ n' ;

C++ ভেক্টর:

C++ এ ডেটা বা মান সংরক্ষণ করার অনেক উপায় রয়েছে। কিন্তু আপাতত, আমরা C++ ভাষায় প্রোগ্রাম লেখার সময় মান সংরক্ষণের সবচেয়ে সহজ এবং সবচেয়ে নমনীয় উপায় খুঁজছি। সুতরাং, ভেক্টরগুলি এমন পাত্র যা সঠিকভাবে একটি সিরিজ প্যাটার্নে অনুক্রম করা হয় যার আকার উপাদানগুলির সন্নিবেশ এবং কাটার উপর নির্ভর করে কার্যকর করার সময় পরিবর্তিত হয়। এর মানে হল যে প্রোগ্রামার প্রোগ্রামটি চালানোর সময় তার ইচ্ছা অনুযায়ী ভেক্টরের আকার পরিবর্তন করতে পারে। তারা অ্যারেগুলির সাথে এমনভাবে সাদৃশ্যপূর্ণ যে তাদের অন্তর্ভুক্ত উপাদানগুলির জন্য যোগাযোগযোগ্য স্টোরেজ অবস্থানও রয়েছে। ভেক্টরের ভিতরে উপস্থিত মান বা উপাদানের সংখ্যা পরীক্ষা করার জন্য, আমাদের একটি ' ব্যবহার করতে হবে std::গণনা' ফাংশন ভেক্টরগুলি সি++ এর স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরিতে অন্তর্ভুক্ত করা হয়েছে তাই এটিতে একটি নির্দিষ্ট হেডার ফাইল রয়েছে যা প্রথমে অন্তর্ভুক্ত করা দরকার:

# অন্তর্ভুক্ত <ভেক্টর>

ঘোষণা:

একটি ভেক্টরের ঘোষণা নীচে দেখানো হয়েছে।

মাধ্যমিক :: ভেক্টর < ডিটি > NameOfVector ;

এখানে, ভেক্টরটি ব্যবহৃত কীওয়ার্ড, DT ভেক্টরের ডেটা টাইপ দেখাচ্ছে যা int, float, char, বা অন্য কোনও সম্পর্কিত ডেটাটাইপ দিয়ে প্রতিস্থাপন করা যেতে পারে। উপরের ঘোষণাটি এভাবে পুনরায় লেখা যেতে পারে:

ভেক্টর < ভাসা > শতাংশ ;

ভেক্টরের আকার নির্দিষ্ট করা হয়নি কারণ এক্সিকিউশনের সময় আকার বাড়তে বা কমতে পারে।

ভেক্টরের সূচনা:

ভেক্টরের প্রাথমিককরণের জন্য, C++ এ একাধিক উপায় রয়েছে।

কৌশল নম্বর 1:

ভেক্টর < int > v1 = { 71 , 98 , 3. 4 , 65 } ;

ভেক্টর < int > v2 = { 71 , 98 , 3. 4 , 65 } ;

এই পদ্ধতিতে, আমরা উভয় ভেক্টরের জন্য সরাসরি মান নির্ধারণ করছি। তাদের উভয়ের জন্য নির্ধারিত মান ঠিক একই রকম।

টেকনিক নম্বর 2:

ভেক্টর < int > v3 ( 3 , পনের ) ;

এই প্রারম্ভিক প্রক্রিয়ায়, 3 ভেক্টরের আকার নির্দেশ করছে এবং 15 হল ডেটা বা মান যা এতে সংরক্ষণ করা হয়েছে। 15 মান সংরক্ষণ করে 3 এর প্রদত্ত আকার সহ ডেটাটাইপ 'int'-এর একটি ভেক্টর তৈরি করা হয়েছে যার মানে ভেক্টর 'v3' নিম্নলিখিতগুলি সংরক্ষণ করছে:

ভেক্টর < int > v3 = { পনের , পনের , পনের } ;

প্রধান অপারেশন:

আমরা ভেক্টর শ্রেণীর অভ্যন্তরে ভেক্টরগুলিতে যে প্রধান ক্রিয়াকলাপগুলি বাস্তবায়ন করতে যাচ্ছি তা হল:

  • একটি মান যোগ করা হচ্ছে
  • একটি মান অ্যাক্সেস করা
  • একটি মান পরিবর্তন
  • একটি মান মুছে ফেলা হচ্ছে

সংযোজন এবং মুছে ফেলা:

ভেক্টরের অভ্যন্তরে উপাদানগুলির সংযোজন এবং অপসারণ পদ্ধতিগতভাবে করা হয়। বেশিরভাগ ক্ষেত্রে, উপাদানগুলি ভেক্টর কন্টেইনারগুলির সমাপ্তিতে ঢোকানো হয় তবে আপনি পছন্দসই জায়গায় মানগুলিও যোগ করতে পারেন যা শেষ পর্যন্ত অন্যান্য উপাদানগুলিকে তাদের নতুন অবস্থানে স্থানান্তরিত করবে। যেখানে, মুছে ফেলার সময়, শেষ অবস্থান থেকে মানগুলি মুছে ফেলা হলে, এটি স্বয়ংক্রিয়ভাবে ধারকটির আকার হ্রাস করবে। কিন্তু যখন কন্টেইনারের ভিতরের মানগুলি একটি নির্দিষ্ট অবস্থান থেকে এলোমেলোভাবে মুছে ফেলা হয়, তখন নতুন অবস্থানগুলি স্বয়ংক্রিয়ভাবে অন্যান্য মানগুলিতে নির্ধারিত হয়।

ব্যবহৃত ফাংশন:

ভেক্টরের ভিতরে সংরক্ষিত মানগুলি পরিবর্তন বা পরিবর্তন করতে, কিছু পূর্ব-সংজ্ঞায়িত ফাংশন রয়েছে যা মডিফায়ার হিসাবে পরিচিত। অনুসরণ হিসাবে তারা:

  • Insert(): এটি একটি নির্দিষ্ট স্থানে একটি ভেক্টর কন্টেইনারের ভিতরে একটি মান যোগ করার জন্য ব্যবহৃত হয়।
  • ইরেজ(): এটি একটি নির্দিষ্ট অবস্থানে একটি ভেক্টর কন্টেইনারের ভিতরে একটি মান অপসারণ বা মুছে ফেলার জন্য ব্যবহৃত হয়।
  • Swap(): এটি একটি ভেক্টর কন্টেইনারের ভিতরের মানগুলির অদলবদল করার জন্য ব্যবহৃত হয় যা একই ডেটা টাইপের অন্তর্গত।
  • Assign(): এটি ভেক্টর কন্টেইনারের ভিতরে পূর্বে সংরক্ষিত মানের জন্য একটি নতুন মান বরাদ্দ করার জন্য ব্যবহৃত হয়।
  • Begin(): এটি একটি লুপের ভিতরে একটি ইটারেটর ফেরত দেওয়ার জন্য ব্যবহৃত হয় যা প্রথম উপাদানের ভিতরে ভেক্টরের প্রথম মানকে সম্বোধন করে।
  • Clear(): এটি একটি ভেক্টর কন্টেইনারের ভিতরে সংরক্ষিত সমস্ত মান মুছে ফেলার জন্য ব্যবহৃত হয়।
  • Push_back(): এটি ভেক্টর কন্টেইনার শেষ করার সময় একটি মান যোগ করার জন্য ব্যবহৃত হয়।
  • Pop_back(): এটি ভেক্টর কন্টেইনার শেষ করার সময় একটি মান মুছে ফেলার জন্য ব্যবহৃত হয়।

উদাহরণ:

এই উদাহরণে, ভেক্টর বরাবর মডিফায়ার ব্যবহার করা হয়।

প্রথমত, আমরা এবং হেডার ফাইলগুলি অন্তর্ভুক্ত করছি। এর পরে, নামস্থান std একযোগে সমস্ত ক্লাস যোগ করার জন্য একত্রিত করা হয়েছে। পুরো প্রোগ্রামের লজিক লেখার জন্য, আমরা main() ফাংশনকে কল করছি যেখানে 'digits' নামে একটি ভেক্টর শুরু করা হয়েছে। এই ভেক্টরের অ্যাসাইনমেন্টটি পরবর্তী ধাপে করা হয় যেখানে 'ডিজিট' 6 এবং 24 এর একটি মান দিয়েছে, যার মানে হল ভেক্টর কন্টেইনারের ভিতরে 6 টি উপাদান সংরক্ষণ করা হয়েছে, যার প্রতিটির মান 24। এই মানগুলি তারপর 'cout' ব্যবহার করে প্রদর্শিত হয় ' আদেশ। একটি 'ফর' লুপ ব্যবহার করা হয় মডিফায়ার ফাংশনের জন্য push_back() কনটেইনারের ভিতরে উপাদানগুলি যোগ করার জন্য। এখন, শেষে অঙ্কের সাথে 3 মান যোগ করা হয়েছে। ভেক্টর কন্টেইনারের আকারের রেকর্ড রাখার জন্য আমরা একটি পরিবর্তনশীল 'x' শুরু করি। এখন, শেষ উপাদানের মান প্রদর্শিত হয় এবং ফিরে পপ() ফাংশন কন্টেইনারের ভিতরে সংরক্ষিত '3' নম্বরটি মুছে ফেলবে। সমস্ত উপাদান প্রদর্শনের জন্য, আমরা এর সাথে আবার একটি 'for' লুপ ব্যবহার করছি সন্নিবেশ () সংশোধক যা মান সন্নিবেশ করবে। এখানে, ভেক্টর কন্টেইনারের শুরুতে 4 ঢোকানো হবে এবং স্ক্রিনে প্রদর্শিত হবে। দ্য স্পষ্ট() সংশোধক তারপর কন্টেইনারের ভিতরে সংরক্ষিত সমস্ত মান মুছে ফেলবে বা মুছে ফেলবে। ক্লিয়ারিং সম্পন্ন করার পরে ভেক্টরের আকার দেখানো হয়।

আউটপুট নীচে দেখানো হয়েছে.

C++ ফাইল ইনপুট আউটপুট:

একটি ফাইল আন্তঃসম্পর্কিত ডেটার একটি সমাবেশ। C++ এ, একটি ফাইল হল বাইটের একটি ক্রম যা কালানুক্রমিক ক্রমে একসাথে সংগ্রহ করা হয়। বেশিরভাগ ফাইল ডিস্কের ভিতরে বিদ্যমান। কিন্তু ম্যাগনেটিক টেপ, প্রিন্টার এবং যোগাযোগ লাইনের মতো হার্ডওয়্যার ডিভাইসগুলিও ফাইলগুলিতে অন্তর্ভুক্ত রয়েছে।

ফাইলের ইনপুট এবং আউটপুট তিনটি প্রধান শ্রেণী দ্বারা চিহ্নিত করা হয়:

  • 'আইস্ট্রিম' ক্লাসটি ইনপুট নেওয়ার জন্য ব্যবহার করা হয়।
  • আউটপুট প্রদর্শনের জন্য 'ওস্ট্রিম' ক্লাস নিযুক্ত করা হয়।
  • ইনপুট এবং আউটপুটের জন্য, 'iostream' ক্লাস ব্যবহার করুন।

ফাইলগুলি C++ এ স্ট্রিম হিসাবে পরিচালনা করা হয়। যখন আমরা একটি ফাইলে বা একটি ফাইল থেকে ইনপুট এবং আউটপুট নিই, তখন নিম্নলিখিত ক্লাসগুলি ব্যবহার করা হয়:

  • অফ স্ট্রিম: এটি একটি স্ট্রিম ক্লাস যা একটি ফাইলে লেখার জন্য ব্যবহৃত হয়।
  • ইফস্ট্রিম: এটি একটি স্ট্রিম ক্লাস যা একটি ফাইল থেকে বিষয়বস্তু পড়ার জন্য ব্যবহার করা হয়।
  • প্রবাহ: এটি একটি স্ট্রিম ক্লাস যা একটি ফাইলে বা ফাইল থেকে পড়া এবং লেখা উভয়ের জন্য ব্যবহৃত হয়।

'আইস্ট্রিম' এবং 'ওস্ট্রিম' শ্রেণীগুলি উপরে উল্লিখিত সমস্ত শ্রেণীর পূর্বপুরুষ। ফাইল স্ট্রীমগুলি 'cin' এবং 'cout' কমান্ডের মতোই ব্যবহার করা সহজ, এই ফাইল স্ট্রিমগুলিকে অন্যান্য ফাইলের সাথে সংযুক্ত করার পার্থক্যের সাথে। আসুন 'fstream' ক্লাস সম্পর্কে সংক্ষেপে অধ্যয়নের জন্য একটি উদাহরণ দেখি:

উদাহরণ:

এই উদাহরণে, আমরা একটি ফাইলে ডেটা লিখছি।

আমরা প্রথম ধাপে ইনপুট এবং আউটপুট স্ট্রীমকে একীভূত করছি। হেডার ফাইল যোগ করা হয় কারণ আমরা ফাইল থেকে ডেটা লিখতে এবং পড়তে যাচ্ছি। এরপর নামস্থানের সাহায্যে ক্লাস ডাকা হয়। দ্য প্রধান() প্রোগ্রামের বডির জন্য ফাংশন বলা হয় যেখানে 'অফস্ট্রিম' ব্যবহার করা হয় যা একটি ফাইলে ডেটা লিখে, ফাইলটি New_File হিসাবে তৈরি করা হয়। পরবর্তী ধাপে, আমরা ব্যবহার করে 'example' নামে একটি টেক্সট ফাইল খুলছি খোলা( ) পদ্ধতি। আমরা ফাইলটিতে কৌণিক বন্ধনীর সাহায্যে একটি পাঠ্য লিখছি। প্রতিটি ফাইল একবার মোকাবেলা করা হলে বন্ধ হয়ে যাবে। এর সাহায্যে ফাইলটি বন্ধ করে দেওয়া হয় বন্ধ() ফাংশন

ফাইল 'উদাহরণ' ব্যক্তিগত কম্পিউটার থেকে খোলা হয় এবং ফাইলটিতে লেখা পাঠ্যটি উপরে দেখানো হিসাবে এই টেক্সট ফাইলটিতে ছাপানো হয়।

একটি ফাইল খোলা হচ্ছে:

যখন একটি ফাইল খোলা হয়, এটি একটি স্ট্রিম দ্বারা প্রতিনিধিত্ব করা হয়। ফাইলটির জন্য একটি অবজেক্ট তৈরি করা হয়েছে যেমনটি আগের উদাহরণে New_File তৈরি করা হয়েছিল। স্ট্রীমে করা সমস্ত ইনপুট এবং আউটপুট অপারেশন স্বয়ংক্রিয়ভাবে ফাইলে প্রয়োগ করা হয়। একটি ফাইল খোলার জন্য, open() ফাংশনটি ব্যবহার করা হয়:

খোলা ( NameOfFile , মোড ) ;

এখানে, মোডটি বাধ্যতামূলক নয়।

একটি ফাইল বন্ধ করা:

সমস্ত ইনপুট এবং আউটপুট অপারেশন শেষ হয়ে গেলে, আমাদের সম্পাদনা করার জন্য খোলা ফাইলটি বন্ধ করতে হবে। আমরা একটি নিয়োগ করা প্রয়োজন হয় বন্ধ() এই পরিস্থিতিতে ফাংশন।

নতুন নথি. বন্ধ ( ) ;

এটি করা হলে, ফাইলটি অনুপলব্ধ হয়ে যায়। যদি কোনো পরিস্থিতিতে অবজেক্টটি ধ্বংস হয়ে যায়, এমনকি ফাইলের সাথে সংযুক্ত থাকা সত্ত্বেও, ধ্বংসকারী স্বতঃস্ফূর্তভাবে close() ফাংশনটিকে কল করবে।

পাঠ্য ফাইল:

টেক্সট ফাইল টেক্সট সংরক্ষণ করতে ব্যবহার করা হয়. অতএব, যদি পাঠ্যটি প্রবেশ করা হয় বা প্রদর্শিত হয় তবে এতে কিছু বিন্যাস পরিবর্তন থাকতে হবে। টেক্সট ফাইলের অভ্যন্তরে লেখার ক্রিয়াকলাপ একই রকম যা আমরা 'cout' কমান্ডটি সম্পাদন করি।

উদাহরণ:

এই পরিস্থিতিতে, আমরা টেক্সট ফাইলে ডেটা লিখছি যা পূর্ববর্তী চিত্রে ইতিমধ্যে তৈরি করা হয়েছিল।

এখানে, আমরা New_File() ফাংশন ব্যবহার করে 'example' নামের ফাইলে ডেটা লিখছি। আমরা ব্যবহার করে 'উদাহরণ' ফাইলটি খুলি খোলা() পদ্ধতি ফাইলে ডেটা যোগ করতে 'অফস্ট্রিম' ব্যবহার করা হয়। ফাইলের ভিতরে যাবতীয় কাজ করার পর প্রয়োজনীয় ফাইলটি ব্যবহার করে বন্ধ হয়ে যায় বন্ধ() ফাংশন ফাইলটি না খুললে 'ফাইলটি সমর্থিত নয়, ফাইল লোড করার সময় ত্রুটি' দেখানো হয়।

ফাইলটি খোলে এবং পাঠ্যটি কনসোলে প্রদর্শিত হয়।

একটি পাঠ্য ফাইল পড়া:

একটি ফাইলের রিডিং পরবর্তী উদাহরণের সাহায্যে দেখানো হয়েছে।

উদাহরণ:

ফাইলের ভিতরে সংরক্ষিত ডেটা পড়ার জন্য 'ifstream' ব্যবহার করা হয়।

উদাহরণে শুরুতে প্রধান হেডার ফাইল অন্তর্ভুক্ত রয়েছে। তারপরে, ভিতরে 'ifstream' ব্যবহার করুন প্রধান() ফাংশন 'ifstream'-এর সাহায্যে, আমরা 'New_File' ফাইলের সাথে ডেটা পড়ব যাতে 'উদাহরণ' টেক্সট ফাইলের ভিতরে সংরক্ষিত টেক্সট দেখানো হয়। আমরা নিয়োগ খোলা() ফাইল খোলার পদ্ধতি। এর পরে, আমরা 'while' লুপটি ব্যবহার করব। 'উদাহরণ' টেক্সট ফাইল থেকে ডেটা পড়ার পরে, বন্ধ() প্রয়োজনীয় ফাইল বন্ধ করতে ফাংশন ব্যবহার করা হয়। যদি সিস্টেমে নির্দিষ্ট ফাইল না থাকে, তাহলে আমরা 'ফাইল খুলতে অক্ষম' বার্তাটি পাই।

টেক্সট ফাইলের ভিতরে সংরক্ষিত সমস্ত তথ্য দেখানো হিসাবে স্ক্রিনে প্রদর্শিত হয়।

উপসংহার

উপরের গাইডে, আমরা C++ ভাষা সম্পর্কে বিস্তারিতভাবে শিখেছি। উদাহরণ সহ, প্রতিটি বিষয় প্রদর্শিত এবং ব্যাখ্যা করা হয়, এবং প্রতিটি কর্ম বিশদভাবে বর্ণনা করা হয়।