এটি সম্ভবত সি ++ 11 এর অর্থ কী হতে পারে?
struct : bar {} foo {};
এটি সম্ভবত সি ++ 11 এর অর্থ কী হতে পারে?
struct : bar {} foo {};
উত্তর:
প্রথমত, আমরা একটি বগ-স্ট্যান্ডার্ড বিমূর্ত ইউডিটি (ব্যবহারকারী-সংজ্ঞায়িত প্রকার) নেব:
struct foo { virtual void f() = 0; }; // normal abstract type
foo obj;
// error: cannot declare variable 'obj' to be of abstract type 'foo'
আসুন আমরা এটিকেও স্মরণ করি যে আমরা এটি সংজ্ঞায়িত করার সাথে সাথে ইউডিটি ইনস্ট্যান্ট করতে পারি:
struct foo { foo() { cout << "!"; } }; // just a definition
struct foo { foo() { cout << "!"; } } instance; // so much more
// Output: "!"
আসুন উদাহরণগুলি একত্রিত করুন, এবং স্মরণ করুন যে আমরা একটি ইউডিটি সংজ্ঞায়িত করতে পারি যার নাম নেই :
struct { virtual void f() = 0; } instance; // unnamed abstract type
// error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'
বেনামে ইউডিটি সম্পর্কে আমাদের আর প্রমাণের দরকার নেই, তাই আমরা খাঁটি ভার্চুয়াল ফাংশন হারাতে পারি। নাম পরিবর্তন instance
করে foo
, আমাদের সাথে বাকি রয়েছে:
struct {} foo;
পেয়ে বন্ধ.
এখন, যদি এই বেনামে UDT কিছু বেস থেকে প্রাপ্ত হয়?
struct bar {}; // base UDT
struct : bar {} foo; // anonymous derived UDT, and instance thereof
শেষ অবধি, সি ++ 11 প্রসারিত সূচনাকারীদের পরিচয় করিয়ে দেয় , যেমন আমরা বিভ্রান্তিকর জিনিসগুলি করতে পারি:
int x{0};
এবং এই:
int x{};
এবং, অবশেষে, এটি:
struct : bar {} foo {};
এটি একটি নামহীন কাঠামো বার থেকে প্রাপ্ত, একটি ফাঁকা প্রারম্ভক দিয়ে ফু হিসাবে ইনস্ট্যান্ট করা ated