সি ++ এ ইন্টারফেস এবং প্রয়োগের ব্যবস্থা করার উপায়


12

আমি দেখেছি যে শিরোনাম ফাইলে কী যায় এবং সিপিপি ফাইলে কী হয় সে সম্পর্কে সি ++ তে বিভিন্ন বিভিন্ন দৃষ্টান্ত রয়েছে। আফাইক, বেশিরভাগ লোকেরা, বিশেষত সি পটভূমির লোকেরা এটি করেন:

foo.h

 class foo {
 private:
     int mem;
     int bar();
 public:
     foo();
     foo(const foo&);
     foo& operator=(foo);
     ~foo();
 }

foo.cpp

 #include foo.h
 foo::bar() { return mem; }
 foo::foo() { mem = 42; }
 foo::foo(const foo& f) { mem = f.mem; }
 foo::operator=(foo f) { mem = f.mem; }
 foo::~foo() {}
 int main(int argc, char *argv[]) { foo f; }

যাইহোক, আমার প্রভাষকরা সাধারণত নতুনদের এভাবে সি ++ পড়ান:

foo.h

 class foo {
 private:
     int mem;
     int bar() { return mem; }
 public:
     foo() { mem = 42; }
     foo(const foo& f) { mem = f.mem; }
     foo& operator=(foo f) { mem = f.mem; }
     ~foo() {}
 }

foo.cpp

 #include foo.h
 int main(int argc, char* argv[]) { foo f; }
 // other global helper functions, DLL exports, and whatnot

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

আমি উভয় উপায়ে প্রো এবং কনস সংগ্রহ করতে চাই। সম্ভবত এখনও অন্যান্য উপায় আছে?

আমার উপায়গুলির একটি অসুবিধা অবশ্যই মাঝে মধ্যে আগাম ঘোষণার প্রয়োজন।


2
foo.cppএখন আপনার fooশ্রেণীর সাথে কিছু করার নেই এবং খালি ছেড়ে দেওয়া উচিত (সম্ভবত তবে এটি #includeআপনার বিল্ড সিস্টেমকে খুশি করতে পারে)।
বেনজামিন ব্যানিয়ের

2
আপনার প্রভাষকরা উন্মাদ।
কক্ষপথের হালকাত্বের রেস

উত্তর:


16

দ্বিতীয় সংস্করণটি লেখা সহজ হলেও এটি প্রয়োগের সাথে ইন্টারফেসের মিশ্রণ করে।

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

এ ছাড়াও আপনার বাস্তবায়ন বিশদটি প্রকাশ করা উচিত নয় , আপনি দ্বিতীয় সংস্করণ সহ অযৌক্তিক পুনঃসংশোধন পাবেন ।


1
+1 আমার প্রোফাইলার শিরোনাম ফাইলগুলিতে রাখা কোডটি ইন্সট্রুমেন্ট করে না - এটিও একটি মূল্যবান কারণ।
ইউজিন

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

3

'93 -95 এ আমি এটি দ্বিতীয় উপায়ে ফিরে এসেছি। 5-10 ফাংশন / ফাইল (একটি একই 486 পিসিতে .. এবং না, আমি ক্লাস সম্পর্কে জানতাম না, আমার বয়স মাত্র 14-15 বছর ছিল এবং কোনও ইন্টারনেট ছিল না ) দিয়ে একটি ছোট অ্যাপটি পুনরায় সংযোগ করতে কয়েক মিনিট সময় নিয়েছিল ) ।

সুতরাং, আপনি কি প্রাথমিক শিক্ষাগুলি শেখাচ্ছেন এবং আপনি পেশাদারভাবে যা ব্যবহার করেন তা হ'ল বিশেষত সি ++ এ different

আমি মনে করি সি ++ এবং একটি এফ 1 কারের মধ্যে তুলনাটি উপযুক্ত। আপনি কোনও এফ 1 গাড়িতে নতুনদের রাখেন না (আপনি ইঞ্জিনটিকে 80-95 ডিগ্রি সেলসিয়াসে প্রাক-উত্তাপিত না করলেই এটি শুরুও করে না)।

প্রথম ভাষা হিসাবে সি ++ পড়ান না। সাধারণভাবে বিকল্প 1 এর চেয়ে 2 বিকল্প কেন খারাপ তা জানার জন্য আপনার যথেষ্ট অভিজ্ঞ হওয়া উচিত, স্ট্যাটিক সংকলন / সংযোগের অর্থ কী, এবং সি ++ কেন এটি প্রথম উপায়ে পছন্দ করে তা বুঝতে পারেন।


এই উত্তরটি আরও ভাল হবে যদি আপনি স্থির সংকলন / লিঙ্কিংয়ের বিষয়ে কিছুটা বিস্তারিত বর্ণনা করেন (তবে আমি এটির আগে জানি না!)
ফেলিক্স ডমবাক

2

দ্বিতীয় পদ্ধতিটি হ'ল আমি একেবারে ইনলাইনড ক্লাস বলি। আপনি একটি শ্রেণির সংজ্ঞা লিখছেন তবে এটি ব্যবহার করে আপনার সমস্ত কোড কেবল কোডটিকে ইনলাইন করবে।

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

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

আপনার ক্লাসটি আরও জটিল হয়ে উঠলেও, এমনকি একটি লুপ যুক্ত করে, এটি এইভাবে করার সুবিধা হ্রাস পাবে।

এটির এখনও এর সুবিধাগুলি রয়েছে বিশেষত:

  • যদি এটি "সাধারণ-কার্যকারিতা" কোড হয় তবে আপনি কেবল শিরোনামটি অন্তর্ভুক্ত করতে পারেন এবং এটির উত্সযুক্ত লাইব্রেরির সাথে লিঙ্ক না করেই একাধিক প্রকল্প থেকে এটি ব্যবহার করতে পারেন।

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

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


1

আপনার এক্সিকিউটেবলটি আরও বড় হয়ে উঠলে এটি তাত্পর্যপূর্ণ বা সত্য হতে পারে না, তবে শিরোলেখ ফাইলগুলিতে আরও কোড সংকলককে গতির জন্য অনুকূলিত করার আরও সম্ভাবনা দেয় ces

আপনি যদি কেবল শিরোনামের পাঠাগারটি লিখবেন কিনা তা স্থির করে থাকেন , তবে এই বিষয়টি আপনার উদ্বেগগুলির মধ্যে একটি।

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