Computer >> Máy Tính >  >> Lập trình >> C ++

Mô phỏng lớp cuối cùng trong C ++

Trong Java hoặc C #, chúng ta có thể sử dụng các lớp cuối cùng. Các lớp cuối cùng là loại lớp đặc biệt. Chúng ta không thể mở rộng lớp đó để tạo lớp khác. Trong C ++ không có cách nào trực tiếp như vậy. Ở đây chúng ta sẽ xem cách mô phỏng lớp cuối cùng trong C ++.

Ở đây chúng ta sẽ tạo thêm một lớp gọi là MakeFinalClass (hàm tạo mặc định của nó là private). Chức năng này được sử dụng để giải quyết mục đích của chúng tôi. Lớp MyClass chính có thể gọi hàm tạo của MakeFinalClass vì chúng là các lớp bạn bè.

Một điều chúng ta cần lưu ý, MakeFinalClass cũng là một lớp cơ sở ảo. Chúng tôi sẽ đặt nó là lớp cơ sở ảo vì chúng tôi muốn gọi phương thức khởi tạo của MakeFinalClass thông qua phương thức khởi tạo của MyDerivedClass, không phải MyClass (Phương thức khởi tạo của một lớp cơ sở ảo không được gọi bởi lớp kế thừa từ nó, thay vì phương thức khởi tạo được được gọi bởi hàm tạo của lớp bê tông).

Ví dụ

#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;
}

Đầu ra

In constructor 'MyDerivedClass::MyDerivedClass()':
[Error] 'MakeFinalClass::MakeFinalClass()' is private

Chúng ta có thể tạo các đối tượng của MyClass vì đây là bạn của MakeFinalClass và có quyền truy cập vào các hàm tạo của nó.

Ví dụ

#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;
}

Đầu ra

This is constructor of the MakeFinalClass
This is constructor of the final Class