C++での最終クラスのシミュレーション
JavaまたはC#では、finalクラスを使用できます。最終クラスは特別なタイプのクラスです。そのクラスを拡張して別のクラスを作成することはできません。 C ++では、そのような直接的な方法はありません。ここでは、C++で最終クラスをシミュレートする方法を説明します。
ここでは、MakeFinalClassという追加のクラスを1つ作成します(デフォルトのコンストラクターはprivateです)。この関数は、目的を解決するために使用されます。メインクラスのMyClassは、フレンドクラスであるため、MakeFinalClassのコンストラクターを呼び出すことができます。
MakeFinalClassも仮想基本クラスであることに注意する必要があります。 MyClassではなくMyDerivedClassのコンストラクターを介して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
これはMakeFinalClassのフレンドであり、そのコンストラクターにアクセスできるため、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; } }; main() { MyClass obj; }
出力
This is constructor of the MakeFinalClass This is constructor of the final Class
-
C++での多重継承
多重継承は、クラスが複数の基本クラスから継承する場合に発生します。したがって、クラスは、多重継承を使用して複数の基本クラスから機能を継承できます。これは、C++などのオブジェクト指向プログラミング言語の重要な機能です。 多重継承を示す図を以下に示します- C++で多重継承を実装するプログラムは次のとおりです- 例 #include <iostream> using namespace std; class A { public: int a = 5; A() { &
-
Javaの最終クラス
finalとして宣言されているクラスを使用する主な目的は、クラスがサブクラス化されないようにすることです。クラスがfinalとしてマークされている場合、どのクラスもfinalクラスから機能を継承できません。 public final class Test { // body of class }