C++ 中模擬 final 類
在 Java 或 C# 中,可以使用 final 類。final 類是一種特殊型別的類。不能擴充套件該類以建立另一個類。在 C++ 中沒有這種直接的方法。下面我們將瞭解如何在 C++ 中模擬 final 類。
這裡我們將建立一個名為 MakeFinalClass 的額外類(其預設建構函式為私有)。此函式用於解決我們的目的。主類 MyClass 可以呼叫 MakeFinalClass 的建構函式,因為它們是友元類。
我們必須注意一件事,MakeFinalClass 也是一個虛基類。我們將使其成為虛基類,因為我們想透過 MyDerivedClass 的建構函式而不是 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;
}
};
//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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言
C++
C#
MongoDB
MySQL
Javascript
PHP