Страница 1 из 1

Потоки ввода/вывода

Добавлено: 23 апр 2024, 20:18
ya

Использование потоков - вывод в файл

Добавлено: 23 апр 2024, 20:25
ya
Использование потоков - вывод в файл

Создадим файловый поток
ofstream outfile;

Откроем файл на запись
outfile.open("test.data")

Теперь с ним можно общаться, как с cout
for (unsigned int i = 0; i<10; i++) { outfile << i << endl; }

Закроем поток
outfile.close();

Полиморфизм потоков

Добавлено: 23 апр 2024, 20:38
ya
Полиморфизм потоков

Инициализация

Код: Выделить всё

class Animal
{
	public:
		Animal {}
		virtual void say(ostream& os) { os << " просто текст " << endl; }
};
Реализация

Код: Выделить всё

int main()
{
	Animal a;
	a.say(cout); // Вывод на экран
	
	ofstream of;
	of.open("say.txt");
	a.say(of); // Запись в файл
	a.close();
	
	return 0;
}

Перегрузка оператора вывода (геттер)

Добавлено: 23 апр 2024, 20:55
ya
Перегрузка оператора вывода (геттер)

Код: Выделить всё

class Vector2D
{
	protected:
		int x;
		int y;
	public:
		Vector2D(int _x, int _y) : x(_x), y(_y) { }
		int getX() const { return x; }
		int getY() const { return y; }
};

Код: Выделить всё

std::ostream& operator<<(std::ostream os, const Vector2D& v)
{
	os << " ( " << v.getX() << " ; " << v.getY() << " ) ";
	return os;
}

Перегрузка оператора вывода (подружаня)

Добавлено: 23 апр 2024, 21:04
ya
Перегрузка оператора вывода (подружаня)
В случае, если нужно вывести содержимое класса в поток
Применяется в исключительных случаях как костыль

Код: Выделить всё

class Vector2D
{
	protected:
		int x;
		int y;
	public:
		Vector2D(int _x, int _y) : x(_x), y(_y) { }
		// Перегруженный оператор - сравнение двух векторов на раверство
		bool operator== (const Vector2D& v2) const { return x==v2.x && y == v2.y; }
		friend std::ostream& operator<<(std::ostream&, Vector2D&);
};
Перекрытый оператор friend имеет доступ ко всей внутренней изнанке

Перегруженный оператор, вывод вектора в формате (1;1)

Код: Выделить всё

std::ostream& operator<<std::ostream os, const Vector2D& v
{
	os << " ( " << v.getX() << " ; " << v.getY() << " ) ";
	return os 
}
Чтение вектора: двух координат

Код: Выделить всё

std::istream& operator>>(std::istream &is, Vector2D &v)
{
	int x,y;
	is >> x >> y;
	v.setX(x);
	v.setY(y);
	return is;
}