Notas de fluxo de E / S em C ++

  1. O fluxo de bytes pode ser qualquer informação armazenada na memória.
  2. Cin é um objeto da classe istream, e cout é um objeto da classe ostream .
  3. '>>' e '<<' podem identificar automaticamente os tipos de entrada e saída.
  4. As sobrecargas de operador de inserção e extração de sobrecarga podem apenas agregar formulários sobrecarregados de função , porque esses objetos não são personalizáveis.
  5. Formato da função de sobrecarga:
  • A forma de '<<':
ostream& operator <<(ostream& stream, const 类名 &obj){
    
    
	return stream;
}
//设这里有个Complex复数对象,要重载输出运算符
friend ostream& operator <<(ostream& stream, const Complex& obj){
    
    
//在这里已经是重载,传入的对象是stream,不再是cout,cout也只是一个对象而已。但也不是不能使用,只是这样写能更加灵活,满足多种输出类型的需求
	stream << obj.real << obj.image;
	return stream;
}
  • formato '>>'
istream& operator >>(istream& stream, 类名 &obj){
    
    
	return stream;
}
//设这里有个Complex复数对象,要重载输入运算符
friend istream& operator >>(istream& stream, Complex& obj){
    
    
//如果想在这里输出提示,就不是stream对象了,因为它是istream对象,这里用cout就好
	cout << "please input the real and the image" << endl;
	stream >> obj.real;
	stream >> obj.image;
	return stream;
}
  • Nota:
    (1) Não é que os objetos cin e cout não possam ser usados ​​dentro de funções sobrecarregadas, eles devem ser usados ​​de acordo com a situação específica e as necessidades do programador.
    (2) A referência do valor de retorno da função ao fluxo pode suportar entrada e saída contínuas.
Complex obj1, obj2;
cin >> obj1 >> obj2;
cout << obj1 << endl << obj2 << endl;
  1. Função de membro de formato
  • Formulário de chamada
int a = 1234;
cout.width(8);
cout << a;
  • Nota: Algumas funções são sempre eficazes depois de chamadas, mas algumas só têm efeito uma vez.
  1. Manipulador de classe ios
  • Manipuladores sem parâmetros estão no arquivo de cabeçalho de iostream.h, e aqueles com parâmetros estão em iomanip.h.
  • Como usar
double a = 3.1415;
cout << setprecision(2) << a;
  • O número de ativações do manipulador também é semelhante à função de formatação.
  1. get / getline (char *, stringlength, separator)
  • O delimitador de get não será inserido na matriz, mas permanecerá no fluxo em buffer. Se houver caracteres inseridos no futuro, o delimitador será aceito. Mas getline eliminará o delimitador diretamente e isso não acontecerá.
  1. Ao sobrecarregar o operador de saída, se o seguinte não for uma classe simples, mas uma operação de classe, o tipo de parâmetro não pode ser uma referência durante a sobrecarga.
cout << obj1 + obj2 << endl;

// 这种写法运行错误
ostream& operator <<(ostream&, className&)

// 这种写法是正确的
ostream& operator <<(ostream&, className)

Acho que você gosta

Origin blog.csdn.net/weixin_45688536/article/details/106825124
Recomendado
Clasificación