如何防止 C++ 中的類繼承


在這裡,我們將看到如何在 C++ 中防止繼承。防止繼承的概念稱為最終類。

在 Java 或 C# 中,我們可以使用最終類。在 C++ 中沒有這種直接的方式。在這裡,我們將看到如何在 C++ 中模擬最終類。

在這裡,我們將建立一個名為 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

更新時間: 2019-07-30

1K+ 瀏覽

開啟你的 職業生涯

完成課程以獲得認證

開始
廣告