warum können wir kein eigenes ostream-Objekt erstellen?

9

Wenn cout ein Objekt der ostream-Klasse ist, warum können wir dann nicht unser eigenes Objekt, sagen wir, 'out' aus derselben Klasse deklarieren? Soll der folgende Code nicht funktionieren?

%Vor%

oder anders

%Vor%     
user1232138 09.04.2012, 10:11
quelle

3 Antworten

5

Stream-Objekte benötigen einen Puffer, um Daten an das externe Gerät zu senden. Das Standard-Ausgabestream-Objekt std::cout wird mit einem Puffer initialisiert, der den Transport an die Stelle kapselt, an der Ihre Ausgabe angezeigt wird. Hier ist ein künstliches Beispiel:

%Vor%

Um ein eigenes Stream-Objekt zu erstellen, das vorgibt, das Standard-Stream-Objekt zu sein, können Sie einfach den Puffer von std::cout an seinen Konstruktor übergeben. Beachten Sie, dass ich dies in der Praxis nicht empfehlen würde:

%Vor%     
0x499602D2 21.01.2014 20:41
quelle
0

Sie haben das ostream -Objekt nicht gesetzt (woran wird dieser Stream ausgegeben?), natürlich können Sie es nicht benutzen. Ссылка
d. h.

%Vor%     
cloudygoose 09.04.2012 10:16
quelle
0
Die Klasse

ostream stammt aus der Klasse ios . Konstruktor der ios Klasse sieht wie folgt aus.

%Vor%

Dies bedeutet, dass der Standardkonstruktor von ios geschützt ist und Sie daher kein Objekt mit dem Standardkonstruktor von ostream erstellen können.

Die einzige Möglichkeit, ein Objekt von ostream zu erstellen, ist streambuf sb * Argument.

%Vor%

Ebenso können Sie ostream-Objekte nicht nach Wert übergeben.

Grund

ios wird von ios_base abgeleitet. Der Kopierkonstruktor ist privat.

%Vor%     
SACHIN GOYAL 14.09.2016 08:55
quelle

Tags und Links