Ich weiß nicht, ob ich Ihre Frage richtig verstanden habe, aber können Sie nicht einfach einen Bericht vor dem if / else-Block deklarieren und ihn dann initialisieren?
%Vor%Oder kürzer gesagt:
%Vor%Natürlich müssen Sie dazu den leeren Konstruktor definieren.
Als Erstes können Sie kein Objekt innerhalb einer Bedingungsanweisung erstellen und nach der Bedingungsanweisung verwenden: Die beiden Zweige der Bedingungsanweisung erstellen einen Bereich, in dem alle Objekte innerhalb von Bedingungsanweisungen das Ende der Verzweigung zerstören. Das heißt, Sie müssen einen anderen Ansatz finden. Der einfachste Ansatz ist wahrscheinlich, die Erstellung des Objekts an eine Funktion zu delegieren, die die Objekte entsprechend zurückgibt:
%Vor%Ein alternativer Ansatz besteht darin, den ternären Operator zu verwenden, um die %code% in der einen oder anderen Weise bedingungslos zu erstellen:
%Vor%Alle diese Ansätze gehen davon aus, dass die Klasse %code% tatsächlich kopierbar ist.
Die einfachste Sache, die einem einfällt, ist, ein wenig Refactoring im Code-Flow durchzuführen. Erstellen Sie eine Funktion, die die Eingabe verarbeitet und das konstruierte Objekt zurückgibt:
%Vor%Rufen Sie dann die Funktion von main an. Die kleine Änderung im Design ist die Einführung einer Funktion, deren einzige Verantwortlichkeit darin besteht, eine %code% aus Benutzereingaben zu erzeugen, was als Funktion sinnvoll ist.
Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe. Entschuldigungen, wenn Sie die Antwort lesen und erkennen, dass das der Fall ist.
Aber ich denke, die Hauptstrategie würde sein, Konstruktorüberladung zu nutzen. Sie definieren also Konstruktoren für beide: den Fall, dass keine Parameter übergeben werden, und den Fall, dass Parameter übergeben werden. Der erste (was Sie als Standardkonstruktor bezeichnen) wird das Unternehmen initialisieren und die Namen auf die Standardwerte zurücksetzen. Letzterer weist die empfangenen Parameter den Namen der Firma und des Berichts zu.
Was die Verwendung von Zeigern betrifft: Sie können dies vermeiden, indem Sie viele Objekte vom Typ 'Report' (Klasse) deklarieren. Zum Beispiel können Sie ein Array von Kopfzeilen (Objekten) erstellen. Und dann können Sie es definieren, wenn der Benutzer antwortet.
Aber wenn Sie Zeiger verwenden, tun Sie alles in der Laufzeit (dynamische Zuweisung), während Sie Arrays verwenden (oder viele Objekte deklarieren): Der Betrag ist fest. Dies kann ineffizient sein.
Wir wissen nicht, ob die Klasse %code% kopierfähig ist, also verwenden Sie besser Zeiger.
%Vor%und natürlich sollten Sie %code% Zeiger so verwenden
%Vor%Als Erstes können Sie kein Objekt innerhalb einer Bedingungsanweisung erstellen und nach der Bedingungsanweisung verwenden: Die beiden Zweige der Bedingungsanweisung erstellen einen Bereich, in dem alle Objekte innerhalb von Bedingungsanweisungen das Ende der Verzweigung zerstören. Das heißt, Sie müssen einen anderen Ansatz finden. Der einfachste Ansatz ist wahrscheinlich, die Erstellung des Objekts an eine Funktion zu delegieren, die die Objekte entsprechend zurückgibt:
%Vor% Ein alternativer Ansatz besteht darin, den ternären Operator zu verwenden, um die Report
in der einen oder anderen Weise bedingungslos zu erstellen:
Alle diese Ansätze gehen davon aus, dass die Klasse Report
tatsächlich kopierbar ist.
Wir wissen nicht, ob die Klasse Report
kopierfähig ist, also verwenden Sie besser Zeiger.
und natürlich sollten Sie header
Zeiger so verwenden
Die einfachste Sache, die einem einfällt, ist, ein wenig Refactoring im Code-Flow durchzuführen. Erstellen Sie eine Funktion, die die Eingabe verarbeitet und das konstruierte Objekt zurückgibt:
%Vor% Rufen Sie dann die Funktion von main an. Die kleine Änderung im Design ist die Einführung einer Funktion, deren einzige Verantwortlichkeit darin besteht, eine Report
aus Benutzereingaben zu erzeugen, was als Funktion sinnvoll ist.
Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe. Entschuldigungen, wenn Sie die Antwort lesen und erkennen, dass das der Fall ist.
Aber ich denke, die Hauptstrategie würde sein, Konstruktorüberladung zu nutzen. Sie definieren also Konstruktoren für beide: den Fall, dass keine Parameter übergeben werden, und den Fall, dass Parameter übergeben werden. Der erste (was Sie als Standardkonstruktor bezeichnen) wird das Unternehmen initialisieren und die Namen auf die Standardwerte zurücksetzen. Letzterer weist die empfangenen Parameter den Namen der Firma und des Berichts zu.
Was die Verwendung von Zeigern betrifft: Sie können dies vermeiden, indem Sie viele Objekte vom Typ 'Report' (Klasse) deklarieren. Zum Beispiel können Sie ein Array von Kopfzeilen (Objekten) erstellen. Und dann können Sie es definieren, wenn der Benutzer antwortet.
Aber wenn Sie Zeiger verwenden, tun Sie alles in der Laufzeit (dynamische Zuweisung), während Sie Arrays verwenden (oder viele Objekte deklarieren): Der Betrag ist fest. Dies kann ineffizient sein.
Tags und Links class c++ constructor object if-statement