আপনার কোডটি নতুন করে লিখতে না পেরে একটি এনামকে ক্লাসে রিফ্যাক্টর করার জন্য একটি সুসংগত সামর্থ্য (§) রয়েছে যার অর্থ আপনি খুব বেশি সম্পাদনা না করে যা করতে বলছিলেন তা কার্যকরভাবে করতে পারেন ।
(§) এলিমেন্ট ডাব্লু একটি মন্তব্যে উল্লেখ করেছে যে, টাইপ_ট্রেটস নির্ভরশীল কোডটি কাজ করবে না, উদাহরণস্বরূপ, কেউ অটো ব্যবহার করতে পারে না ইত্যাদি stuff এবং সি ++ টি বর্জন করা সর্বদা ভুল
enum struct
এবং enum class
বিশেষ উল্লেখ তাই এই অংশ নয় scoping চলেছেন।
আপনার মূল এনাম উদাহরণস্বরূপ 'পোষা প্রাণী' (এটি কেবল উদাহরণ হিসাবে!)।
enum pet {
fish, cat, dog, bird, rabbit, other
};
(1) আপনি এটিকে উদাহরণস্বরূপ পেটইনামে পরিবর্তন করুন (যাতে এটি আপনার বিদ্যমান কোড থেকে আড়াল করা যায়)।
enum petEnum {
fish, cat, dog, bird, rabbit, other
};
(২) আপনি এর নীচে একটি নতুন শ্রেণির ঘোষণা যুক্ত করুন (মূল এনামের সাথে নামকরণ)
class pet {
private:
petEnum value;
pet() {}
public:
pet(const petEnum& v) : value{v} {} //not explicit here.
operator petEnum() const { return value; }
pet& operator=(petEnum v) { value = v; return *this;}
bool operator==(const petEnum v) const { return value == v; }
bool operator!=(const petEnum v) const { return value != v; }
// operator std::string() const;
};
(3) আপনি এখন আপনার পোষা প্রাণীর ক্লাসে আপনার পছন্দ মতো ক্লাসের পদ্ধতিগুলি যুক্ত করতে পারেন। যেমন। একটি স্ট্রিং অপারেটর
pet::operator std::string() const {
switch (value) {
case fish: return "fish";
case cat: return "cat";
case dog: return "dog";
case bird: return "bird";
case rabbit: return "rabbit";
case other: return "Wow. How exotic of you!";
}
}
এখন আপনি যেমন স্টাড :: কোট ব্যবহার করতে পারেন ...
int main() {
pet myPet = rabbit;
if(myPet != fish) {
cout << "No splashing! ";
}
std::cout << "I have a " << std::string(myPet) << std::endl;
return 0;
}