একটি ক্লাস বনাম একটি ক্লাস ব্যবহার করার সময় ওভারহেড এবং অন্যান্য বিবেচনাগুলি কী?


17

এম্বেড থাকা সিস্টেমে সি প্রচলিতভাবে কাঠামোগত ডেটা ধরে রাখতে স্ট্র্ট ব্যবহার করে।

আরডুইনো সারণিতে সি ++ এনেছে, সুতরাং আমরা পরিবর্তে ক্লাস ব্যবহার করতে পারি।

আসুন আমাদের বলুন যে আমাদের দুটি পৃথক ডেটা স্ট্রাকচার রয়েছে যা খুব অনুরূপ হিসাবে বিবেচনা করা যেতে পারে:

typedef struct 
{
    int valueOne;
    int valueTwo;
    int valueThree;
} value_t;

এবং:

class Value
{
    public:
        int valueOne;
        int valueTwo;
        int valueThree;
}

স্মৃতিশক্তি হিসাবে, এই কোন পার্থক্য করতে হবে?

আমি এখনও দেখতে পাচ্ছি যে কাঠামোর কৌশলটি প্রচুরভাবে ব্যবহৃত হচ্ছে - এটি কেন?


5
যদি আমি আমার সি ++ সঠিকভাবে স্মরণ করি তবে ডিফল্ট দৃশ্যমানতার মধ্যে structএবং এর মধ্যে কোনও পার্থক্য নেইclass
ratchet freak

4
আমি অনুমান করবে structগুলি প্রাথমিকভাবে ব্যবহৃত কারণ মহান যাতে যারা ছোট MCUs জন্য সময় লেখা কোড অনেক ব্যয় সম্ভবত সি অনেক ভালো তারপর জানে সি ++ এবং স্বয়ংক্রিয়ভাবে আগে সি ++ বাগধারার সি বাগধারার জন্য ছুঁয়েছে, এম্বেডেড হার্ডওয়্যার সংখ্যাগরিষ্ঠ সি কোডেড হয়। এটি একটি প্রোগ্রামার পারফরম্যান্স সমস্যা।
কনার ওল্ফ

উত্তর:


13

গৃহীত উত্তর থেকে নেওয়া হিসাবে আপনি কখন C ++ এর কাঠামো বনাম একটি ক্লাস ব্যবহার করবেন?

শ্রেণি এবং সি ++ এর কাঠামোর মধ্যে পার্থক্য কেবল স্ট্রাক্টগুলিতে ডিফল্ট পাবলিক সদস্য এবং বেস এবং ক্লাসে ডিফল্ট ব্যক্তিগত সদস্য এবং বেস থাকে। উভয় শ্রেণি এবং স্ট্রাক্টে সরকারী এবং বেসরকারী সদস্যের মিশ্রণ থাকতে পারে, উত্তরাধিকার ব্যবহার করতে পারে এবং সদস্যের কার্যাদি থাকতে পারে।

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

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


6

সি এর বিপরীতে, structসি ++ এর একটি উদাহরণ হ'ল একটি অবজেক্টের ঠিক একইভাবে class। সংকলিত কোডের দৃষ্টিকোণ থেকে, তারা অভিন্ন। স্মৃতি ব্যবহার, প্রান্তিককরণ, অ্যাক্সেসের সময় ইত্যাদি ঠিক একই রকম (অর্থাত্ ওভারহেড নেই) s

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

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


4

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


3

স্মৃতিশক্তি হিসাবে, এই কোন পার্থক্য করতে হবে?

কোনটিই নয়। স্ট্রাক্ট এবং ক্লাসগুলি একই জিনিস, কেবল সুরক্ষা স্তরের ক্ষেত্রে পৃথক হয় এবং তাত্ক্ষণিকভাবে একটি 'অবজেক্ট' তৈরি করে।

এখনও স্ট্র্যাট কৌশলটি ভারী ব্যবহৃত হচ্ছে তা দেখুন - এটি কেন?

আপনি যদি ডেটা সদস্যদের আড়াল করার চেষ্টা না করেন তবে কম টাইপিং


2

মনে রাখবেন যে

typedef struct { ... } Foo;

সি ++ এ অপ্রচলিত এবং আপনার কেবল ব্যবহার করা উচিত

struct Foo { ... };

উত্তরে এটি খুব স্পষ্ট নয় তবে স্ট্রাক্টের অন্যান্য প্রভাব হ'ল সার্বজনীন উত্তরাধিকার বনাম ডিফল্ট বনাম ব্যক্তিগত উত্তরাধিকার শ্রেণীর সাথে।

অন্যদের দ্বারা যেমন উল্লেখ করা হয়েছে, স্ট্রাক ব্যবহার করা সাধারণত পিওডি ধরণের জন্য একটি কনভেনশন।

প্রযুক্তিগতভাবে 'স্ট্রাক্ট বনাম অবজেক্ট' 'স্ট্রাক্ট বনাম ক্লাস' হওয়া উচিত (স্ট্রাক্ট ইনস্ট্যান্ট করা বা ক্লাস এখনও একটি বস্তু দেয়)।


সম্পাদিত প্রশ্ন বস্তু-> শ্রেণি।
সাইবারবিবোনস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.