Потоки ввода/вывода
Инструкция
https://www.youtube.com/watch?v=0UkH2eg87Ro&list=PLecy9mZ2ycLL2Ck31EFefbZ4bbb5nsyVK&index=14
Исходники
https://github.com/TheEntityCircle/oop-2nd-term/tree/master/2024/lection05
Потоки ввода/вывода
Использование потоков - вывод в файл
Использование потоков - вывод в файл
Создадим файловый поток
ofstream outfile;
Откроем файл на запись
outfile.open("test.data")
Теперь с ним можно общаться, как с cout
for (unsigned int i = 0; i<10; i++) { outfile << i << endl; }
Закроем поток
outfile.close();
Создадим файловый поток
ofstream outfile;
Откроем файл на запись
outfile.open("test.data")
Теперь с ним можно общаться, как с cout
for (unsigned int i = 0; i<10; i++) { outfile << i << endl; }
Закроем поток
outfile.close();
Полиморфизм потоков
Полиморфизм потоков
Инициализация
Реализация
Инициализация
Код: Выделить всё
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;
}
Перегрузка оператора вывода (геттер)
Перегрузка оператора вывода (геттер)
Код: Выделить всё
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;
}
Перегрузка оператора вывода (подружаня)
Перегрузка оператора вывода (подружаня)
В случае, если нужно вывести содержимое класса в поток
Применяется в исключительных случаях как костыль
Перекрытый оператор friend имеет доступ ко всей внутренней изнанке
Перегруженный оператор, вывод вектора в формате (1;1)
Чтение вектора: двух координат
В случае, если нужно вывести содержимое класса в поток
Применяется в исключительных случаях как костыль
Код: Выделить всё
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&);
};
Перегруженный оператор, вывод вектора в формате (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;
}