Ich habe versucht, den Implementierungscode von "final" in cpp zu verstehen:"final" -Klasse Implementierung in C++
folgenden ist der Code:
/* 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;
}
Ausgang: Compilerfehler
In constructor 'Derived::Derived()':
error: 'MakeFinal::MakeFinal()' is private
In diesem konnte ich die Logik der virtuellen Übernahme der MakeFinal-Klasse nicht verstehen. Wir könnten es einfach (makeFinal-Klasse) als public geerbt haben und selbst in diesem Fall hätten wir es nicht weiter erben können (weil der Makefile-Konstruktor privat ist und nur die Final-Klasse, die sein Freund ist, darauf zugreifen kann) .
Irgendein Zeiger ??
Haben Sie es tatsächlich mit nicht-virtueller Vererbung versucht? – hvd
Ein 'privater Konstruktor' hat nichts damit zu tun, dass er nicht erben kann oder nicht. Ich verstehe wirklich nicht, was du versuchst zu tun. –
@ Bash.d Sicher ist es. Sie können nicht von einer Klasse ableiten, wenn dies einen Aufruf eines Konstruktors erfordert, auf den nicht zugegriffen werden kann (weil der Konstruktor privat ist). – hvd