Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำลองคลาสสุดท้ายใน 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