Bereitstellung von Basis-Klasse Konstruktor-Parameter beim erstellen einer abgeleiteten Klasse-Instanz
Gibt es eine Möglichkeit zu bieten Konstruktor-Parameter, um eine Basis-Klasse bei der new-ing eine abgeleitete Instanz der Klasse? (Das ist, wenn die Basisklasse der Konstruktor hat die Standard Werte für diesen Parameter)
E. g.
class Base
{
public:
Base::Base( string name = "" )
: m_name( name ) {};
private
string m_name;
};
class Derived : public Base
{
public:
Derived::Derived() {};
};
Dann brauche ich etwas wie das hier tun:
void main()
{
Base* instance = new Derived( "Jeff" );
};
Dieser offensichtlich nicht funktioniert. Gibt es einen Weg, um neue eine abgeleitete Instanz und geben Sie einen Konstruktor-parameter, um die es base, ohne, dass die parameter der Konstruktor der abgeleiteten Klasse.
InformationsquelleAutor Marcus Tomlinson | 2012-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht.
Ihre abgeleiteten Klasse wird der Konstruktor muss die Argumente, und explizit übergeben Sie Sie nach unten zu der Basis-Konstruktor der Klasse.
Dies ist der Fall, unabhängig davon, ob Sie
new
oder nicht.Ziemlich viel. Natürlich, es gibt Varianten von dem, was ich vorgeschlagen habe, aber Sie alle beinhalten die
Derived
Konstruktor explizit aufrufen derBase
Konstruktor in seiner Initialisierungs-Liste. Aber das macht Sinn; die Tatsache, dassDerived
ist abgeleitet vonBase
ist eine Implementierung detail bei der Konstruktion der Zeit; diese Tatsache ist im wesentlichen gekapselt.Verdammt... Schuss für die Antwort!
Wenn Sie nicht wollen, zu ändern, Konstruktoren, könnte man hinzufügen, Eigenschaften, die gesetzt werden können, post-Konstruktion (z.B. eine
setName(string)
Methode inBase
). Dann, wenn jemand Standard-Konstrukte eineDerived
Instanz können Sie anschließend rufen Sieinstance.setName("Jeff")
.Wirklich meine größte Sorge ist, dass die variable festgelegt werden, nach vorne und nur einmal -mit einem setter erfüllen, werden nicht die früheren, sondern befriedigen konnte den letzteren.
InformationsquelleAutor Oliver Charlesworth
Können Sie es nicht tun, wenn Sie möchten, verschiedene Namen in die base-Klasse. allerdings distinct name nicht ein Kriterium ist, kann man es mit übergeben Konstanten Literale:
ODER zu übergeben default-Wert Abgeleitete Klasse den Konstruktor.
InformationsquelleAutor Sach