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% 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:
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:
Sie haben das ostream -Objekt nicht gesetzt (woran wird dieser Stream ausgegeben?), natürlich können Sie es nicht benutzen.
Ссылка
d. h.
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%