Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

1

07.05.2008, 18:33

Verhinderung der Ableitbarkeit einer C++ Klasse

Ich habe gerade in einem Buch gelesen, dass es in C++ keine Möglichkeiten gibt, um zu verhindern, dass eine Klasse abgeleitet werden kann.
Das find ich echt schade und mir fällt auf Anhieb auch keine Lösung ein.

Ist es wirklich so?

Mit freundlichen Grüßen,
WhiteMike

Anonymous

unregistriert

2

07.05.2008, 19:02

Das ist so und an für sich auch sehr gut so.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

07.05.2008, 19:08

hast du denn ein beispiel wo das ungünstig wäre?^^

Anonymous

unregistriert

4

07.05.2008, 19:21

- Architekturmodelle wie z. B. CORBA, COM, usw.
- Versionierung und Patching von Klassen
- Erweiterbarkeit von Klassen (Man weiß nie was morgen kommt)
- usw.

Dinge womit man im Job eigentlich viel zu tun hat. :)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

07.05.2008, 20:01

Nunja, doch. Es gibt eine Möglichkeit, aber die ist unschön! :) Außerdem macht es sogut wie nie Sinn eine Generalisierung zu verbieten.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Foo;

namespace Priv
{
    class FinalizeFoo 
    {
        friend class ::Foo;

        FinalizeFoo();
        FinalizeFoo( const FinalizeFoo& );
    };
}

class Foo : public virtual Priv::FinalizeFoo
{
public:
    Foo()
    {
    }
};

class Bar : public Foo // Geht nicht ...

{
public:
    Bar()
    {
    }
};
@D13_Dreinig

6

07.05.2008, 20:02

Ich weiß zwar nicht wofür das gut sein soll, aber naja.
Man könnte evtl. den einzigen Konstruktor private machen, und dafür sorgen, dass dieser einen Parameter hat. Eine Abgeleitete Klasse müsste in ihrem Konstruktor den Konstruktor der anderen Klasse aufrufen, was nicht gehen sollte, da dieser private ist.
Evtl. könnte das so funktionieren.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

07.05.2008, 20:03

Es ist richtig dass es in C++ kein extra Schlüsselwort gibt um eine Klasse final, sealed, etc. zu machen. Braucht man aber auch gar nicht.
z.B. einfach den Konstruktor private machen ;)

Anonymous

unregistriert

8

07.05.2008, 20:04

Jonathan_Klein
Ich frage mich nur wie du so eine Klasse in deinem Programm instanzieren möchtest.

Das hat im Grunde selben Effekt wie: "Dort ist mein Ferrarie, ich hatte nur nie Schlüssel, sieht aber trotzdem schön aus, ne?"

9

07.05.2008, 20:14

Mir friends ...

Anonymous

unregistriert

10

07.05.2008, 20:18

knivil
Anwendungsbeispiel: Klasse ist in der DLL und möchtest die außerhalb dieser DLL benutzen, schon kann man es knicken.

Außerdem: Was hat das für einen Sinn, jede Klasse dort extra mit friend einzutragen für sowas? Gar keinen, da sollte man lieber lernen anständig zu coden. ;)

Werbeanzeige