সি এবং সি ++ এর মধ্যে মৌলিক পার্থক্যগুলি কী কী? [বন্ধ]


41

অনেকেরই "সি / সি ++" লেখার ঝোঁক, যেন তারা একই জিনিস। যদিও তারা অনেকগুলি মিল ভাগ করে নিচ্ছে তবে তারা স্পষ্টভাবে এক নয়।

তবে সি এবং সি ++ এর মধ্যে আসলে কী মৌলিক পার্থক্য রয়েছে? সি ++ কি সি এর বর্ধিত সংস্করণ, বা সি-তে এমন বৈশিষ্ট্য রয়েছে যা সি ++ তে বিদ্যমান নেই?


2
আমি ভেবেছিলাম সি ++ সি এর সুপার সেট
ব্যবহারকারী

1
সি ++ বর্ধিত হয় না ... এটি সি এর সুপারস্টেট ..
জো ডিএফ

2
@ জোডিএফ এটি প্রথমদিকে ছিল তবে এটি আসলে "সি এর সাথে সামঞ্জস্যপূর্ণ" যার অর্থ একই জিনিস নয়। আপনি সি ++ তে সি কোড করবেন না এবং সমস্ত মান সি মানক সি ++ এর সাথে সামঞ্জস্যপূর্ণ নয়।
ক্লাইম

+1 আপনি ঠিক বলেছেন, এখন ভাই বা চাচাত ভাইদের মতো আছেন। আপনি আমি বলতে চাচ্ছি তা জানেন.
জো ডিএফ

উত্তর:


43

নিম্নলিখিত পয়েন্টগুলি সি ++ এর সাথে সম্পর্কিত:

  1. (ব্যবহারকারী-সংজ্ঞায়িত) স্ট্যাটিক টাইপ সিস্টেম: আপনার ডেটা এবং তাদের ব্যবহার সম্পর্কে স্থির চেকগুলিকে মঞ্জুরি দেয় - সি তে অনেক সহজে করা ত্রুটিগুলি নির্দেশ করে
  2. মাল্টি- "দৃষ্টান্ত": সি এর মতো, অবজেক্ট-ওরিয়েন্টেড প্যারাডিজম, জেনেরিক প্যারাডাইম ইত্যাদির সাথে কাজ করার অনুমতি দেয়
  3. কনস্ট্রাক্টর / ডেস্ট্রাক্টর: কোনও কিছু তৈরি বা নষ্ট করার সময় একবার কী করতে হবে তা একবারই বলার এবং নিশ্চিত হয়ে নিন যে ব্যবহারকারীকে সঠিক ফাংশনটি খুঁজে পেতে এবং এটি সি এর মতো ব্যবহার করতে হবে না be
  4. RAII (খারাপ নাম দেওয়া হয়েছে): আপনাকে সর্বদা স্মৃতি পরিচালনা করতে হবে না। কেবল জিনিসগুলিকে সুযোগে রাখুন এবং আপনার অবজেক্টগুলিকে আজীবন বর্ণনা করে স্মার্ট পয়েন্টার ব্যবহার করুন। এখনও কাঁচা পয়েন্টার ব্যবহার করতে পারেন।
  5. টেমপ্লেটস: ম্যাক্রোর চেয়ে ভাল, চূড়ান্ত সংকলনের আগে ধরণের কৌশলগুলি তৈরি এবং তৈরি করার জন্য একটি আসল ভাষা। কেবলমাত্র একটি টাইপ সিস্টেমের অভাব রয়েছে (ভবিষ্যতের সি ++ মানের ধারণাগুলি দেখুন)।
  6. অপারেটর ওভারলোডস: একটি সাধারণ সিনট্যাকটিক পদ্ধতিতে এবং এমনকি আপনার সি ++ কোডের মধ্যে এম্বেডড ডোমেন-নির্দিষ্ট ভাষা সংজ্ঞায়িত করতে অপারেশনগুলি বর্ণনা করতে দেয় describe
  7. স্কোপড নাম: নাম স্থান, শ্রেণি / কাঠামো, ফাংশন ইত্যাদির নামগুলি সংঘর্ষ না হয় তা নিশ্চিত করার সহজ নিয়ম রয়েছে।
  8. ব্যতিক্রম সিস্টেম: ত্রুটিগুলি প্রচার করার একটি উপায় যা প্রায়শই রিটার্ন কোডের চেয়ে ভাল। প্রকৃতপক্ষে, রিটার্ন কোডটি ডোমেন-নির্দিষ্ট যৌক্তিক ত্রুটির জন্য ভাল, কারণ অ্যাপ্লিকেশনটি এটি পরিচালনা করতে হবে। ব্যতিক্রমগুলি "হার্ড" ত্রুটিগুলির জন্য ব্যবহৃত হয়, নীচের কোডগুলিকে কেবল ভুল করে তোলে এমন জিনিস। এটি সম্ভব হলে কল স্ট্যাকের ত্রুটিগুলি আরও বেশি ধরার অনুমতি দেয়, যেমন ব্যতিক্রমের প্রতিক্রিয়া জানায় (লগিং করে বা রাষ্ট্র স্থির করে) এবং আরআইআইআই সহ, যদি ভালভাবে ব্যবহার করা হয় তবে এটি পুরো প্রোগ্রামটিকে ভুল করে না - যদি ভালভাবে করা হয় তবে আবার।
  9. স্ট্যান্ডার্ড লাইব্রেরি: সি এর নিজস্ব আছে তবে এটি সব "গতিশীল"। সি ++ স্ট্যান্ডার্ড লাইব্রেরিটি প্রায় (আইও স্ট্রিম নয়) টেম্পলেটগুলি (পাত্রে এবং অ্যালগরিদমগুলি দিয়ে তৈরি) তৈরি করা হয় যা কেবলমাত্র আপনি যা ব্যবহার করেন তার জন্য কোড উত্পন্ন করার অনুমতি দেয়। আরও ভাল: সংকলকটি কোড উত্পন্ন করতে হবে, প্রসঙ্গটি সম্পর্কে এটি অনেক কিছু জানতে হবে এবং কোডারকে তার কোডটি অবিচ্ছিন্ন করার প্রয়োজন ছাড়াই প্রচুর অপ্টিমাইজেশান প্রয়োগ করবে - টেমপ্লেট এবং অন্যান্য জিনিসগুলির জন্য ধন্যবাদ।
  10. কনস্ট-সঠিকতা: আপনি পরিবর্তনশীলগুলি পরিবর্তন করবেন না এমনটি নিশ্চিত করার সর্বোত্তম উপায়। ভারেবলগুলিতে কেবল পঠনযোগ্য অ্যাক্সেস নির্দিষ্ট করার অনুমতি দেয়। এবং এটি কেবল সংকলনের সময় পরীক্ষা করা হয় যাতে কোনও রানটাইম ব্যয় হয় না।

31

সি ++ এমন জটিলতা পরিচালনা করতে উদ্ভাবিত হয়েছিল যা সি পরিচালনা করতে পারেনি। উদাহরণস্বরূপ, সি-এর একটি সাধারণ সমস্যাটি হ'ল আপনি "ভেরিয়েবলগুলির জন্য নামগুলি দৌড়তে" পারতেন (আক্ষরিক অর্থে এটি গ্রহণ করা উচিত নয়) কারণ কোনও এনক্যাপসুলেশন, নেমস্পেস ইত্যাদি ছিল না you

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

সি ++ কনস্ট্রাক্টর ডিআইআই অবজেক্টগুলি থাকার সাহায্য করে যা স্বয়ংক্রিয়ভাবে সংকলক দ্বারা কল করা হয়। সি স্ট্রাক্টের বিপরীতে যা প্রোগ্রামার দ্বারা আরম্ভ করা প্রয়োজন (সুতরাং অন্য একটি ত্রুটি-প্রবণ অঞ্চল)।

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

এবং অন্যান্য অনেকগুলি বিষয় যা এখানে তালিকাভুক্ত হতে আমার অনেক বেশি সময় নেয়।


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

আপনার এখানে একটি বক্তব্য রয়েছে তবে আমার উত্তরটির কেন্দ্রবিন্দু ছিল সি বনাম সি ++।
জেস

1
ওহ, আসুন, কে আপনাকে সি দিয়ে ওওপি ব্যবহার করতে বাধা দেয়? আপনি অবজেক্টগুলি পুনরায় ব্যবহার করতে পারেন এবং কিছু করতে পারেন, এমনকি ব্যতিক্রম। এমনকি এটি সম্পর্কে একটি বই রয়েছে, সি

2
@ ভ্লাদ, আপনি যে বিষয়ে কথা বলছেন তার কোনওটিই 25 বছর আগে একটি বিকল্প ছিল না।
জেস

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

15

সাধারণভাবে, সি-তে বিদ্যমান সমস্ত কিছুই সি ++ এ সমর্থিত। স্পষ্টতই বিপরীতটি সম্পূর্ণ মিথ্যা।

সহজ কথায় বলতে গেলে সি ++ হ'ল অবজেক্ট অরিয়েন্টেড (সুতরাং উদাহরণস্বরূপ, আপনার ক্লাস রয়েছে), সি নয়।

সি ++ এর বুলিয়ান টাইপ সি 89 নেই।

তারা বিভিন্ন ভাষা। তারা কেবল সিনট্যাক্সের বেশিরভাগ অংশই ভাগ করে নেয়।


4
C99 একটি বুলিয়ান প্রকার (নাম দিয়েছে _Boolসঙ্গে, boolউপনাম হিসাবে)।
জেরি কফিন

1
এটি কঠোরভাবে সত্য নয়। উদাহরণস্বরূপ, C99 এর মধ্যে long longডেটা টাইপ রয়েছে যা আইএসও সি ++ এর অংশ নয় (এখনও)।
চিন্ময় কাঞ্চি

11
ত্রুটি ... সি ++ কেবল অবজেক্ট অরিয়েন্টেড নয়: আপনি সি ++ এর সাথে অবজেক্ট ওরিয়েন্টেড দৃষ্টান্ত ব্যবহার করতে পারেন কারণ ভাষাটি এর জন্য বৈশিষ্ট্যগুলি সরবরাহ করে, তবে এটি অন্যান্য দৃষ্টান্তগুলির জন্যও বৈশিষ্ট্য সরবরাহ করে। আপনার উল্লেখ করা উচিত, এটি সত্যই গুরুত্বপূর্ণ, এটি সবকিছু পরিবর্তন করে। যদি তা না হয়, তবে আমরা সবাই জাভাতে চলে যেতে চাই ...
ক্লাইম

4
সি তে অনেকগুলি কনস্ট্রাকশন রয়েছে যা সি ++ এ কাজ করে না।

1
@ ক্লেজ: হ্যাঁ - তবে এটি এখনও ভুল। যদিও এএনএসআই মূলত সি ৮৯ টি বিকাশ করেছে (যার বুলেয়ান ধরণ ছিল না), এখন নতুন বিকাশ আইএসও দ্বারা করা হয়েছে, এবং এএনএসআই আইএসও মান গ্রহণ করে, সুতরাং বর্তমান এএনএসআই সি স্ট্যান্ডার্ডটি বর্তমান আইএসও সি স্ট্যান্ডার্ডের সাথে সমান (যা আছে একটি বুলিয়ান টাইপ)।
জেরি কফিন

8

সি 99 এর কয়েকটি বৈশিষ্ট্য রয়েছে যা সি ++ (যেমন নমনীয় অ্যারে সদস্য, পরিবর্তনশীল দৈর্ঘ্যের অ্যারে ইত্যাদি) অস্তিত্বহীন (কমপক্ষে ঠিক একই আকারে) exist

সি 99+ লাইব্রেরিতে সি ++ 98/03 স্ট্যান্ডার্ডে উপস্থিত নেই এমন অনেকগুলি যুক্ত করেছে; এর বেশিরভাগ সি ++ 11 এ যুক্ত করা হয়েছে।

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


1

ব্যক্তিগতভাবে, আমি মনে করি যে টেম্পলেটগুলি সর্বাধিক উল্লেখযোগ্য বৈশিষ্ট্য যা সি ++ সি যুক্ত করে to


1
এর, উত্তরাধিকারের সাথে ক্লাসগুলি কেমন? এটি সি তে আসলেই কঠোর পরিশ্রম, যেখানে প্রিপ্রসেসর ম্যাক্রোসের সাহায্যে প্রচুর টেমপ্লেট করা যেতে পারে।
JBRWilkinson

4
প্রিপ্রসেসর ম্যাক্রোগুলি টাইপ-নিরাপদ নয়; এটি খাঁটি পাঠ্য প্রতিস্থাপন, এটি ডিবাগিংকে আরও শক্ত করে তোলে। বুনিয়াদি ক্লাস এবং কাজের উত্তরাধিকার পেতে সি-তে খুব বেশি কাজ করা হয় না + ভাষা ডিজাইনার আপনার জন্য যা বেছে নিয়েছিল তাতে আটকে না গিয়ে আপনি নিজের মেটাওবজেক্ট মডেল তৈরি করতে পারেন। উদাহরণস্বরূপ, এই কাগজটি দেখুন: arxiv.org/abs/1003.2547
zvrba

2
আমার ভোটটি সি -++ এরও বেশি সর্বাধিক উল্লেখযোগ্য বৈশিষ্ট্যটির জন্য ডেস্ট্রাক্টর হবে (এমনকি তাদের বিস্ময়কর ক্লিনআপ সক্ষমতার কারণেও নির্মাণকারীদের উপর)।
থমাস এডিং

@zvrba #define GENERATE_INTERFACE(T) T T##_func(T x);; (টাইপ) সি-তে নিরাপদ ওভারলোডিং / টেম্পলেটগুলি আমি থমাসের সাথে একমত হই যে ধ্বংসকারীরা আরও বেশি গুরুত্বপূর্ণ বৈশিষ্ট্য সি অনুপস্থিত। তবে ধ্বংসকারীরা প্রায়শই গুরুত্বপূর্ণ কোডটি লুকান। নেমস্পেস (স্কোপ) আমার মতে সবচেয়ে গুরুত্বপূর্ণ।
YoYoYonnY
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.