C এবং সি++ এর মধ্যে কিছু পার্থক্য
যদিও C++ হল C-এর একটি সুপারসেট, তবে দুটির মধ্যে কিছু ছোট পার্থক্য রয়েছে এবং কয়েকটি শুরু থেকেই জানার মতো। এগিয়ে যাওয়ার আগে, আসুন তাদের পরীক্ষা করার জন্য সময় নেওয়া যাক।
প্রথমত, C-তে, যখন একটি ফাংশন কোনো প্যারামিটার নেয় না, তখন এর প্রোটোটাইপের ফাংশন প্যারামিটার তালিকার ভিতরে শব্দটি void থাকে। উদাহরণস্বরূপ, সি-তে, যদি f1() নামক একটি ফাংশন কোনো প্যারামিটার না নেয় (এবং একটি অক্ষর প্রদান করে), তাহলে এর প্রোটোটাইপটি এরকম দেখাবে:
char f1 (void);
যাইহোক, C++ এ, শূন্যতা ঐচ্ছিক। অতএব, C++ এ, f1() এর প্রোটোটাইপ সাধারণত এভাবে লেখা হয়:
C এবং সি++ এর মধ্যে কিছু পার্থক্য
যদিও C++ হল C-এর একটি সুপারসেট, তবে দুটির মধ্যে কিছু ছোট পার্থক্য রয়েছে এবং কয়েকটি শুরু থেকেই জানার মতো। এগিয়ে যাওয়ার আগে, আসুন তাদের পরীক্ষা করার জন্য সময় নেওয়া যাক।
প্রথমত, C-তে, যখন একটি ফাংশন কোনো প্যারামিটার নেয় না, তখন এর প্রোটোটাইপের ফাংশন প্যারামিটার তালিকার ভিতরে শব্দটি void থাকে। উদাহরণস্বরূপ, সি-তে, যদি f1() নামক একটি ফাংশন কোনো প্যারামিটার না নেয় (এবং একটি অক্ষর প্রদান করে), তাহলে এর প্রোটোটাইপটি এরকম দেখাবে:
char f1 (void);
যাইহোক, C++ এ, শূন্যতা ঐচ্ছিক। অতএব, C++ এ, f1() এর প্রোটোটাইপ সাধারণত এভাবে লেখা হয়:
char f1();
একটি খালি পরামিতি তালিকা নির্দিষ্ট করার পদ্ধতিতে C++ C থেকে আলাদা। যদি পূর্ববর্তী প্রোটোটাইপটি একটি C প্রোগ্রামে ঘটে থাকে তবে এর সহজ অর্থ এই যে ফাংশনের পরামিতি সম্পর্কে কিছুই বলা হয়নি। C++ এ, এর মানে হল যে ফাংশনের কোনো প্যারামিটার নেই। এই কারণেই যে পূর্ববর্তী উদাহরণগুলি একটি খালি পরামিতি তালিকা ঘোষণা করতে স্পষ্টভাবে void ব্যবহার করেনি। (একটি খালি প্যারামিটার তালিকা ঘোষণা করার জন্য অকার্যকর ব্যবহার অবৈধ নয়; এটি কেবল অপ্রয়োজনীয়। যেহেতু বেশিরভাগ C++ প্রোগ্রামাররা প্রায় ধর্মীয় উত্সাহের সাথে দক্ষতা অর্জন করে, আপনি প্রায় কখনই এইভাবে শূন্যতার ব্যবহার দেখতে পাবেন না।) মনে রাখবেন, C++ এ, এইগুলি দুটি ঘোষণা সমতুল্য:
char f1();
char f1 (void);
C এবং C++ এর মধ্যে আরেকটি সূক্ষ্ম পার্থক্য হল একটি C++ প্রোগ্রামে, সমস্ত ফাংশন প্রোটোটাইপ করা আবশ্যক। মনে রাখবেন, সি-তে প্রোটোটাইপগুলি সুপারিশ করা হয় তবে প্রযুক্তিগতভাবে ঐচ্ছিক। C++ এ, তাদের প্রয়োজন। পূর্ববর্তী বিভাগ থেকে উদাহরণ হিসাবে দেখায়, একটি ক্লাসে থাকা একটি member ফাংশনের প্রোটোটাইপও এটির সাধারণ প্রোটোটাইপ হিসাবে কাজ করে এবং অন্য কোনও পৃথক প্রোটোটাইপের প্রয়োজন নেই।
C এবং C++ এর মধ্যে একটি তৃতীয় পার্থক্য হল C++-এ, যদি কোনো ফাংশনকে একটি মান ফেরত হিসেবে ঘোষণা করা হয়, তাহলে এটি অবশ্যই একটি মান প্রদান করবে। অর্থাৎ, যদি কোনো ফাংশনের রিটার্ন টাইপ থাকে void ছাড়া, সেই ফাংশনের মধ্যে যে কোনো রিটার্ন স্টেটমেন্ট অবশ্যই একটি মান থাকতে হবে। সি-তে, একটি অ-অকার্যকর ফাংশন আসলে একটি মান ফেরত দিতে হবে না। যদি এটি না হয়, একটি garbage এর মান "রিটার্ন করা হয়।"
C-তে, আপনি যদি কোনো ফাংশনের return টাইপ স্পষ্টভাবে উল্লেখ না করেন, তাহলে একটি পূর্ণসংখ্যা রিটার্ন টাইপ ধরে নেওয়া হয়। C++ "default-to-int" নিয়ম বাদ দিয়েছে।
সুতরাং, আপনাকে অবশ্যই সমস্ত ফাংশনের রিটার্ন টাইপ স্পষ্টভাবে ঘোষণা করতে হবে।
C এবং C++ এর মধ্যে আরেকটি পার্থক্য যা আপনি সাধারণত C++ প্রোগ্রামে দেখতে পাবেন যেখানে স্থানীয় ভেরিয়েবল ঘোষণা করা যেতে পারে। C-তে, স্থানীয় ভেরিয়েবলগুলিকে শুধুমাত্র block -এর শুরুতে ঘোষণা করা যেতে পারে, যেকোনো "action" বিবৃতির আগে। C++ এ, স্থানীয় variable যে কোনো জায়গায় ঘোষণা করা যেতে পারে। এই পদ্ধতির একটি সুবিধা হল স্থানীয় ভেরিয়েবলগুলি যেখানে তারা প্রথম ব্যবহার করা হয়েছিল তার কাছাকাছি ঘোষণা করা যেতে পারে, এইভাবে অবাঞ্ছিত পার্শ্ব প্রতিক্রিয়া প্রতিরোধে সহায়তা করে।
অবশেষে, C++ bool ডেটা টাইপ সংজ্ঞায়িত করে, যা Boolean (অর্থাৎ, সত্য/মিথ্যা) মান সংরক্ষণ করতে ব্যবহৃত হয়। C++ true এবং false কীওয়ার্ডগুলিকেও সংজ্ঞায়িত করে, যেটি একমাত্র মান যা টাইপ bool -এর একটি মান থাকতে পারে। C++-এ, relational এবং logical অপারেটরদের ফলাফল হল টাইপ bool -এর একটি মান, এবং সমস্ত শর্তসাপেক্ষ বিবৃতিগুলিকে অবশ্যই একটি বুল মান মূল্যায়ন করতে হবে। যদিও এটি প্রথমে C থেকে একটি বড় পরিবর্তন বলে মনে হতে পারে, তা নয়। আসলে, এটি কার্যত স্বচ্ছ। যেমন আপনি জানেন, C-তে, সত্য হল যেকোনো nonzero -এর মান false হল 0। এটি এখনও C++ এ ধারণ করে কারণ যেকোনো nonzero -এর মান স্বয়ংক্রিয়ভাবে সত্যে রূপান্তরিত হয় এবং Boolean এক্সপ্রেশনে ব্যবহার করা হলে যে কোনো 0 মান স্বয়ংক্রিয়ভাবে মিথ্যাতে রূপান্তরিত হয়। বিপরীতটিও ঘটে: সত্য 1 তে রূপান্তরিত হয় এবং মিথ্যা 0 তে রূপান্তরিত হয় যখন একটি পূর্ণসংখ্যা রাশিতে একটি bool -এর মান ব্যবহার করা হয়। bool -এর সংযোজন আরও পুঙ্খানুপুঙ্খ প্রকার পরীক্ষা করার অনুমতি দেয় এবং আপনাকে বুলিয়ান এবং পূর্ণসংখ্যার প্রকারের মধ্যে পার্থক্য করার একটি উপায় দেয়। অবশ্যই, এর ব্যবহার optional; bool বেশিরভাগই একটি সুবিধা।
উদাহরণ
একটি সি প্রোগ্রামে, কমান্ড-লাইন arguments না থাকলে main() এখানে দেখানো হিসাবে ঘোষণা করা সাধারণ অভ্যাস:
int main (void)
যাইহোক, C++ এ, void এর ব্যবহার অপ্রয়োজনীয়
- এই সংক্ষিপ্ত C++ প্রোগ্রামটি কম্পাইল করবে না কারণ ফাংশনটি sum() প্রোটোটাইপ না
// এই প্রোগ্রাম কম্পাইল হবে না.
#include <iostream> using namespace std;
{
int main()
int a, b, c;
cout << "দুটি সংখ্যা লিখুন: ";
cin >> a >> b; C = sum (a, b);
cout << "সমষ্টি হল: " << c;
return 0;
}
{
// এই ফাংশন একটি প্রোটোটাইপ প্রয়োজন.
sum (int a, int b)
return a+b;
}
- এখানে একটি সংক্ষিপ্ত প্রোগ্রাম রয়েছে যা ব্যাখ্যা করে যে কীভাবে স্থানীয় ভেরিয়েবলগুলি একটি ব্লকের মধ্যে যে কোনও জায়গায় ঘোষণা করা যেতে পারে
#include <iostream> using namespace std;
{
int main()
int i; // ব্লকের শুরুতে স্থানীয় var ঘোষণা করা হয়েছে
cout << "নম্বর লিখুন: ";
cin >> i;
// গণনা ফ্যাক্টোরিয়াল
int j, fact=1; // vars কর্ম বিবৃতি পরে ঘোষিত
for(j=i; j>=1; j--) fact = fact * j;
cout << "ফ্যাক্টোরিয়াল হল " << fact;
return 0;
}
এই সংক্ষিপ্ত উদাহরণে প্রথম ব্যবহারের বিন্দুর কাছাকাছি j এবং ফ্যাক্টের ঘোষণার কোনো মূল্য নেই; যাইহোক, বড় ফাংশনে, ভেরিয়েবলগুলিকে তাদের প্রথম ব্যবহারের বিন্দুর কাছাকাছি ঘোষণা করার ক্ষমতা আপনার কোডকে স্পষ্ট করতে এবং অনিচ্ছাকৃত পার্শ্বপ্রতিক্রিয়া প্রতিরোধ করতে সাহায্য করতে পারে।
- নিম্নলিখিত প্রোগ্রামটি ফলাফল নামে একটি boolean variable তৈরি করে এবং এটিকে মান মিথ্যা নির্ধারণ করে। এটি তারপর একটি if বিবৃতিতে এই ভেরিয়েবল ব্যবহার করে।
#include <iostream>
using namespace std;
{
int main()
bool outcome;
outcome = false;
if (outcome ) cout << "true";
else cout << "false";
return 0;
}
0 Comments