Public Konstructor einer virtuellen Klasse
-
Hallo,
gibt es einen Unterschied, ob ich einen Konstruktor einer virtuellen Klasse
protected oder public mache?
Ich kann ja eh kein Objekt erzeugen und die erbende hat Zugriff...Gruß,
Franz
-
Protector schrieb:
Hallo,
gibt es einen Unterschied, ob ich einen Konstruktor einer virtuellen Klasse
protected oder public mache?
Ich kann ja eh kein Objekt erzeugen und die erbende hat Zugriff...Gruß,
FranzIch gehe mal davon aus das du mit virtueller Klasse ein Klasse mit virtuellen Funktionen meinst

Da gibt es dann natürlich einen Unterschied ob der Konstruktor public oder protected ist.
Denn du kannst ja Objekte erzeugen, ganz anders bei einer abstrakten Klasse ( mind. eine rein virtuelle Funktion) da macht es dann wahrscheinlich keinen Unterschied, denn wie du schon gesagt hast kannst du eh keine Objekt dann von so einer Klasse erzeugen und da du dann sowieso ableiten musst und wenn du public ableiten solltest sollte es dann egal sein ob ctor in Base public oder protected
-
wieso sollte das nicht gehen?
class A { public: A(); virtual void DoSomething(); }; class B : public A { public: B(); virtual void DoSomething(); }; A::A() { ShowMessage("A Konstruktor"); } B::B() { ShowMessage("B Konstruktor"); } void A::DoSomething() { ShowMessage("A DoSomething"); } void B::DoSomething() { ShowMessage("B DoSomething"); } void __fastcall TForm1::FormCreate(TObject *Sender) { A a; a.DoSomething(); B b; b.DoSomething(); }
-
huh? schrieb:
wieso sollte das nicht gehen?
class A { public: A(); virtual void DoSomething(); }; class B : public A { public: B(); virtual void DoSomething(); }; A::A() { ShowMessage("A Konstruktor"); } B::B() { ShowMessage("B Konstruktor"); } void A::DoSomething() { ShowMessage("A DoSomething"); } void B::DoSomething() { ShowMessage("B DoSomething"); } void __fastcall TForm1::FormCreate(TObject *Sender) { A a; a.DoSomething(); B b; b.DoSomething(); }Was willst du uns mit deinem Code sagen ??!!
-
Protector schrieb:
Ich kann ja eh kein Objekt erzeugen und die erbende hat Zugriff...
das dies nicht stimmt?

-
Und was habe ich ihm oben erklärt

Freak_Coder schrieb:
virtueller Klasse ein Klasse mit virtuellen Funktionen meinst
....
Denn du kannst ja Objekte erzeugen
Freak_Coder schrieb:
ganz anders bei einer abstrakten Klasse ( mind. eine rein virtuelle Funktion) da macht es dann wahrscheinlich keinen Unterschied, denn wie du schon gesagt hast kannst du eh keine Objekt dann von so einer Klasse erzeugen.
Und ich glaube der Thread-Starter meinte auch dies im Bezug auf Abstrakte Klassen.
:xmas1:
-
Protector schrieb:
Hallo,
gibt es einen Unterschied, ob ich einen Konstruktor einer virtuellen Klasse
protected oder public mache?
Ich kann ja eh kein Objekt erzeugen und die erbende hat Zugriff...Gruß,
Franzes ist wichtig, die korrekten begriffe zu verwenden, um missverständnissen vorzugbeugen:
C++ kennt abstrakte Klassen, dass sind solche die wenigstens eine rein virtuelle member funktion (oder einen pure virtual destructor) haben. virtuelle klassen gibt es nicht, es gibt zwar virtualle Basisklassen, das ist aber kaum das, was du meinst, mit virtuellen funktionen hat es nichts zu tun.ich nehme im folgenden an, dass du abstrakte klassen meinst. einen public construktor brauchst du immer dann, wenn du eine instanz genau dieser klasse erzeugen willst (und die erzeugende funktion kein member oder friend ist). Da eine abstrakte Klasse nicht instantiiert werden kann, macht es tatsächlich keinen praktischen unterschied. man könnte höchtens fragen, warum du überhaupt einen (selbst-definierten) konstruktor benötigst - meistens sollten abstrakte klassen selbst keine daten enthalten.
ein protected konstruktor ist z.b. sinnvoll, wenn eine klasse nur basisklasse sein soll, aber nicht abstract ist. man könnte zwecks konsistenz argumentieren, dass diese regel dann auch für abstrakte klassen gelten soll. das ist aber eher geschmackssache.