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

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. Pythonでクラス継承はどのように機能しますか?

    クラスの継承 クラスを新たに定義する代わりに、新しいクラス名の後に括弧で囲まれた親クラスをリストすることにより、既存のクラスからクラスを派生させてクラスを作成できます。 子クラスはその親クラスの属性を継承し、それらの属性を子クラスで定義されているかのように使用できます。子クラスは、親のデータメンバーとメソッドをオーバーライドすることもできます。 構文 派生クラスは、親クラスとほとんど同じように宣言されます。ただし、継承する基本クラスのリストは、クラス名の後に示されています- class SubClassName (ParentClass1[, ParentClass2, ...]): &