Objekte in bedingten C ++ Anweisungen erzeugen

9
___ qstnhdr ___ Objekte in bedingten C ++ Anweisungen erzeugen ___ answer9346499 ___

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.

    
___ answer9346591 ___

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.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer9346581 ___

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.

    
___ answer9346560 ___

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.

    
___ tag123class ___ Eine Vorlage zum Erstellen neuer Objekte, die die allgemeinen Zustände und Verhaltensweisen beschreibt. NICHT MIT CSS-KLASSEN VERWECHSELN. Verwenden Sie stattdessen [css]. ___ tag123object ___ Ein Objekt ist eine Entität, die durch Befehle in einer Programmiersprache manipuliert werden kann. Ein Objekt kann ein Wert, eine Variable, eine Funktion oder eine komplexe Datenstruktur sein. In der objektorientierten Programmierung bezieht sich ein Objekt auf eine Instanz einer Klasse. ___ tag123ifstatement ___ Eine "if" -Anweisung ist eine Kontrollstruktur in vielen Programmiersprachen, die den Ausführungsfluss abhängig von einer Bedingung ändert. ___ tag123constructor ___ Eine spezielle Art von Subroutine, die bei der Erstellung eines Objekts aufgerufen wird. ___ answer9346535 ___

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%     
___
nik 19.02.2012, 03:38
quelle

5 Antworten

7

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.

    
Jack 19.02.2012, 03:44
quelle
12

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:

%Vor%

Alle diese Ansätze gehen davon aus, dass die Klasse Report tatsächlich kopierbar ist.

    
Dietmar Kühl 19.02.2012 04:08
quelle
3

Wir wissen nicht, ob die Klasse Report kopierfähig ist, also verwenden Sie besser Zeiger.

%Vor%

und natürlich sollten Sie header Zeiger so verwenden

%Vor%     
Tim Kachko 19.02.2012 03:54
quelle
2

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.

    
quelle
0

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.

    
mehfoos yacoob 19.02.2012 04:01
quelle