Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2018, 16:33   #1
Liza256
 
Регистрация: 19.04.2018
Сообщений: 6
Вопрос [C++] Как для класса определить оператор <<

Как для класса определить оператор <<?
Ввод/вывод для типов данных, определенных пользователем.

Условие:
Создать класс для хранения календарных дат. Обеспечитьвозможность работы с датами в различных форматах, изменения даты на заданное количество дней.Перегрузить операцию « – » для нахождения разности дат и операции сравнения. Для класса определить оператор << . Стандартные функции и типы С для работы с датами не использовать.

Код:
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;


const int MonD[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // Дней в месяце 

class Data {
private:

	int day, month, year;

public:
	Data(int d, int m, int y){
		SetAll(d, m, y);
	}

	friend ostream& operator << (ostream &);     //<-------------

	void Show(){                                               //<------------- ?
		cout << " day = " << day << endl;
		cout << " month = " << month << endl;
		cout << " year = " << year << endl;
		for (int i = 0; i < 35; i++){
			cout << "-";
		}
		cout << endl;
	}
	void SetAll(int d, int m, int y){
		day = d;
		month = m;
		year = y;
	}
};


ostream& operator << (ostream& str){    //<-------------
	str << '\n'; 

return str; }


int main(){
	Data denR(24, 04, 18);

       cout << denR;                     //<-------------

	return 0;
}
Liza256 вне форума Ответить с цитированием
Старый 19.05.2018, 21:45   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Примерно так:
Код:
// ---- Вывод данных в поток
std::ostream& operator << (std::ostream& os, const Data& data)
{
  os << " day = " << data.day << std::endl;
  os << " month = " << data.month << std::endl;
  os << " year = " << data.year << std::endl;
  for (int i = 0; i < 35; i++){
    os << "-";
  }
  os << std::endl;  
  return os;
}
Замечания.
1) Так как у Вас стоит
Код:
using namespace std;
можно везде убрать std::

2) Лично я сделал бы вывод более компактным и в одну строку, чтобы можно было писать примерно так:
Код:
std::cout << "Дата начала: " << d1 << ", дата конца: " << d2 << std::endl;

Последний раз редактировалось Black Fregat; 19.05.2018 в 21:55. Причина: Добавил
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, какой оператор программы затирает память в стеке? Astradam Win Api 1 13.02.2017 14:58
Оператор = value класса - C++/CLI RAFA91 Общие вопросы .NET 12 12.04.2016 16:35
Определить класс список элементов. В определение класса включить два конструктора: для опре- деления списка по его размеру и путем vikav89 Общие вопросы C/C++ 1 11.09.2015 14:45
Определить оператор Creimi69 Общие вопросы C/C++ 0 30.11.2014 12:59
Оператор сдвига как член класса Anubys Общие вопросы C/C++ 0 25.12.2011 02:44