ใน 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