Heim > Backend-Entwicklung > C++ > Können Sie andere Klassen in der C-Standardbibliothek über „std::Exception' hinaus erweitern?

Können Sie andere Klassen in der C-Standardbibliothek über „std::Exception' hinaus erweitern?

Mary-Kate Olsen
Freigeben: 2024-11-03 12:33:31
Original
561 Leute haben es durchsucht

Can You Extend Other Classes in the C   Standard Library Beyond `std::exception`?

Erweiterung der C-Standardbibliothek durch Vererbung

Die C-Standardbibliothek, die weithin als unzugängliche Bastion für Vererbung angesehen wird, täuscht über eine versteckte Ausnahme hinweg seine Reihen. Die Klasse std::Exception steht allein als einzige Entität zur Verfügung, die explizit für die Erweiterung entwickelt wurde. Dies wirft die Frage auf:

Können andere Standardbibliotheksklassen erweitert werden?

Obwohl es keine endgültige Liste gibt, hängt die Antwort von der Entschlüsselung der Absicht des Standards ab. Ein pragmatischer Ansatz beinhaltet die Prüfung der folgenden Kriterien:

  • Fehlen virtueller Methoden: Klassen ohne virtuelle Methoden sind nicht für die Basisvererbung gedacht (z. B. std::vector).
  • Vorhandensein virtueller Methoden: Diese Klassen können als potenzielle Basisklassen dienen.
  • Freundeserklärungen: Zahlreiche Freunderklärungen deuten auf Bedenken hinsichtlich der Kapselung hin und verhindern die Vererbung.
  • Natur der Vorlage: Vorlagen erfordern eine Bewertung; Spezialisierung reicht oft für die Anpassung aus.
  • Richtlinienbasierte Mechanismen:Diese Klassen (z. B. std::char_traits) widerstehen normalerweise der Vererbung.

Implikationen der Vererbung von Standardbibliotheksklassen

Die Erweiterung von std::Exception hebt ein weiteres Problem hervor:

Einhaltung der Schnittstellenerwartungen

Beim Erben von a Standardbibliotheksklasse, die geerbte Schnittstelle muss respektiert werden. Beispielsweise würde eine Unterklasse, die die Memberfunktion what() so ändert, dass sie einen Nullzeiger anstelle einer gültigen Beschreibung zurückgibt, die im ISO-Standard angegebene Schnittstelle verletzen. Obwohl es sich nicht unbedingt um ein Problem der Standardkonformität handelt, beeinträchtigt es die Korrektheit und untergräbt das Prinzip der Ersetzbarkeit für Basisklassen.

Das obige ist der detaillierte Inhalt vonKönnen Sie andere Klassen in der C-Standardbibliothek über „std::Exception' hinaus erweitern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage