চূড়ান্তটি নন-ভার্চুয়াল ফাংশনে প্রয়োগ করা যাবে না।
error: only virtual member functions can be marked 'final'
কোনও ভার্চুয়াল পদ্ধতিটিকে 'চূড়ান্ত' হিসাবে চিহ্নিত করতে সক্ষম হওয়া খুব অর্থবহ হবে না। প্রদত্ত
struct A { void foo(); };
struct B : public A { void foo(); };
A * a = new B;
a -> foo(); // this will call A :: foo anyway, regardless of whether there is a B::foo
a->foo()
সবসময় কল করবে A::foo
।
তবে, যদি এ :: ফু ছিল virtual
, তবে বি :: ফু এটি ওভাররাইড করবে। এটি অনাকাঙ্ক্ষিত হতে পারে এবং তাই ভার্চুয়াল ফাংশনটিকে চূড়ান্ত করে তোলা বুদ্ধিমান হয়ে উঠবে।
যদিও প্রশ্নটি হল, ভার্চুয়াল ফাংশনগুলিতে চূড়ান্ত কেন অনুমতি দেওয়া। আপনার যদি গভীর স্তরক্রম থাকে:
struct A { virtual void foo(); };
struct B : public A { virtual void foo(); };
struct C : public B { virtual void foo() final; };
struct D : public C { /* cannot override foo */ };
তারপরে final
কতটা ওভাররাইড করা যায় তার উপর একটি 'তল' রাখে। অন্যান্য শ্রেণি A এবং B প্রসারিত করতে পারে এবং তাদের ওভাররাইড করতে পারে foo
তবে এটি একটি শ্রেণি C এর পরে প্রসারিত করে তবে এটি অনুমোদিত নয়।
সুতরাং সম্ভবত এটি 'শীর্ষ-স্তরের' ফু তৈরি করার কোনও অর্থ নেই final
, তবে এটি নীচের দিকে বুদ্ধিমান হতে পারে।
(যদিও আমি মনে করি, শব্দগুলি চূড়ান্তভাবে প্রসারিত করার জন্য এবং নন-ভার্চুয়াল সদস্যদের কাছে ওভাররাইড করার সুযোগ রয়েছে They যদিও তাদের আলাদা অর্থ থাকবে))
virtual
কীওয়ার্ডটি ব্যবহার করেন কিনা তা ওভাররাইডিং ফাংশনগুলি পুরোপুরি ভার্চুয়াল ।