C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++での多重継承

    多重継承は、クラスが複数の基本クラスから継承する場合に発生します。したがって、クラスは、多重継承を使用して複数の基本クラスから機能を継承できます。これは、C++などのオブジェクト指向プログラミング言語の重要な機能です。 多重継承を示す図を以下に示します- C++で多重継承を実装するプログラムは次のとおりです- 例 #include <iostream> using namespace std; class A {    public:    int a = 5;    A() {     &

  2. Javaの最終クラス

    finalとして宣言されているクラスを使用する主な目的は、クラスがサブクラス化されないようにすることです。クラスがfinalとしてマークされている場合、どのクラスもfinalクラスから機能を継承できません。 public final class Test {    // body of class }