cpp の「final」の実装コードを理解しようとしていました。
以下はコードです:
/* A program with compilation error to demonstrate that Final class cannot
be inherited */
class Final; // The class to be made final
class MakeFinal // used to make the Final class final
{
private:
MakeFinal() { cout << "MakFinal constructor" << endl; }
friend class Final;
};
class Final : virtual MakeFinal
{
public:
Final() { cout << "Final constructor" << endl; }
};
class Derived : public Final // Compiler error
{
public:
Derived() { cout << "Derived constructor" << endl; }
};
int main(int argc, char *argv[])
{
Derived d;
return 0;
}
出力: コンパイラ エラー
In constructor 'Derived::Derived()':
error: 'MakeFinal::MakeFinal()' is private
これでは MakeFinal クラスを仮想的に継承するロジックが理解できませんでした。単純にそれ (makeFinal クラス) を public として継承することもできますが、その場合でも、それ以上継承することはできません (Makefile のコンストラクターはプライベートであり、そのフレンドである Final クラスのみがアクセスできるため)。
ポインターはありますか??