ที่นี่เราจะดูวิธีป้องกันการสืบทอดใน C ++ แนวความคิดในการป้องกันมรดกเรียกว่าขั้นสุดท้าย
ใน Java หรือ C# เราสามารถใช้คลาสสุดท้ายได้ ใน C ++ ไม่มีทางตรงเช่นนั้น ที่นี่เราจะมาดูวิธีการจำลองคลาสสุดท้ายใน C++
ที่นี่เราจะสร้างคลาสพิเศษหนึ่งคลาสที่เรียกว่า MakeFinalClass (คอนสตรัคเตอร์เริ่มต้นเป็นแบบส่วนตัว) ฟังก์ชันนี้ใช้เพื่อแก้ไขจุดประสงค์ของเรา Class MyClass หลักสามารถเรียก Constructor ของ MakeFinalClass ได้เนื่องจากเป็นคลาสของเพื่อน
สิ่งหนึ่งที่เราต้องสังเกตคือ MakeFinalClass ยังเป็นคลาสฐานเสมือนด้วย เราจะทำให้มันเป็นคลาสฐานเสมือนเพราะเราต้องการเรียกคอนสตรัคเตอร์ของ MakeFinalClass ผ่านตัวสร้างของ MyDerivedClass ไม่ใช่ MyClass (ตัวสร้างของคลาสฐานเสมือนไม่ได้ถูกเรียกโดยคลาสที่สืบทอดมาจากมัน แทนที่จะเป็นตัวสร้างที่ เรียกโดยคอนสตรัคเตอร์ของคลาสคอนกรีต)
ตัวอย่าง
#include <iostream> using namespace std; class MyClass; class MakeFinalClass { private: MakeFinalClass() { cout << "This is constructor of the MakeFinalClass" << endl; } friend class MyClass; }; class MyClass : virtual MakeFinalClass { //this will be final class public: MyClass() { cout << "This is constructor of the final Class" << endl; } }; //try to make derived class class MyDerivedClass : MyClass { public: MyDerivedClass() { cout << "Constructor of the Derived Class" << endl; } }; main() { MyDerivedClass derived; }
ผลลัพธ์
In constructor 'MyDerivedClass::MyDerivedClass()': [Error] 'MakeFinalClass::MakeFinalClass()' is private
เราสามารถสร้างออบเจ็กต์ของ MyClass ได้ เนื่องจากนี่คือเพื่อนของ MakeFinalClass และสามารถเข้าถึงตัวสร้างได้
ตัวอย่าง
#include <iostream> using namespace std; class MyClass; class MakeFinalClass { private: MakeFinalClass() { cout << "This is constructor of the MakeFinalClass" << endl; } friend class MyClass; }; class MyClass : virtual MakeFinalClass { //this will be final class public: MyClass() { cout << "This is constructor of the final Class" << endl; } }; main() { MyClass obj; }
ผลลัพธ์
This is constructor of the MakeFinalClass This is constructor of the final Class