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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2013, 16:59   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Проблемы с инкапсуляцией, перегрузка операторов

Задание: Сделать так чтобы оператор >> находил разницу между датами.
Программа рабочая. Написана на С++

Возникли проблемы с инкапсуляцией (это мое мнение) или я просто что-то не так делаю...

Вот класс:

Код:
class CSemCalendar
{
	int m_year;
	int m_month;
	int m_day;
	int m_month_days[12];

	int SetDay(int);
	int SetMonth(int);
	int SetYear(int);

public:
		CSemCalendar();
		~CSemCalendar();

		void GetDate(char *buf);
		int GetDay();
		int GetMonth();
		int GetYear();

		int SetDate(int AYear, int AMonth, int ADay);
		int SetDate(char *buf);

		void AddDay(int);
		int Week(int,int,int);

		//для Перегрузки операторов
		 void operator-(CSemCalendar &t);
		 friend CSemCalendar operator>>(CSemCalendar &t, CSemCalendar &d);
		

};
Вот "механизм"

Код:
Код:
Код:
void CSemCalendar::operator-(CSemCalendar& t)
{
		m_day=m_day-m_day;
		m_month=m_month-m_month;
		m_year=m_year-m_year;
	
}

CSemCalendar operator>>(CSemCalendar &t, CSemCalendar &d)
{
	int t1,t2,t3;

	

	t1=t.GetDay()-d.GetDay();
	t.SetDay(t1);
	t2=t.GetMonth()-d.GetMonth();
	t.SetMonth(t2);
	t3=t.GetYear()-d.GetYear();
	t.SetYear(t3);

	

	return t;
}
Вот main

Код:

void main()
{
		setlocale(LC_ALL, "Russian");
        CSemCalendar semestr_1; 
		CSemCalendar semestr_N;
		CSemCalendar semestr_2;
					
		
		int start_day, start_month, start_year;
		int qday, qmonth, qyear;
		int i=0;
		int ofday,ofmonth,ofyear;
		int ofday2,ofmonth2,ofyear2;

	while(1)
	{
		printf("Введите дату начала занятий\n");
		scanf("%d", &start_day);
		scanf("%d", &start_month);
		scanf("%d", &start_year);
		if(!semestr_1.SetDate(start_day, start_month, start_year))
		{
			printf("%d ", semestr_1.GetDay());
			printf("%d ", semestr_1.GetMonth());
			printf("%d ", semestr_1.GetYear());
			printf("\nIncorrect date\n");
			continue;
		}
		else break;
	
	}
        while(1)
	{
          printf("Введите дату для задания\n");
          scanf("%d", &qday);
		  scanf("%d", &qmonth);
		  scanf("%d", &qyear);
		  if(!semestr_N.SetDate(qday, qmonth, qyear))
          {
            printf("The date You have typed is invalid.\n");
            continue;
		  }

		/*  if(!semestr_N.Week(qday, qmonth, qyear))
			  printf("\nНижняя неделя");
		  else
		  {  printf("\nВерхняя неделя");  }

		  ofday2=semestr_N.GetDay();
		  ofmonth2=semestr_N.GetMonth();
		  ofyear2=semestr_N.GetYear();
		 
		  while(1)
		  {	  
					semestr_1.AddDay(7);
					i++;
					ofday=semestr_1.GetDay();
					ofmonth=semestr_1.GetMonth();
					ofyear=semestr_1.GetYear();
					if((ofday>=ofday2)&&(ofmonth>=ofmonth2))
						break;
		  }*/
					
			printf("\n%d\n\n", i);

			printf("Текущая дата: \n");
			printf("%d.%d.%d\n", semestr_N.GetDay(), semestr_N.GetMonth(), semestr_N.GetYear());
			printf("Задание: отнять текущую дату \n");
			semestr_N-semestr_N;
			printf("%d.%d.%d\n", semestr_N.GetDay(), semestr_N.GetMonth(), semestr_N.GetYear());
			printf("Разница между 2 датами : ");
			semestr_N>>semestr_1;
			printf("%d.%d.%d\n", semestr_N.GetDay(), semestr_N.GetMonth(), semestr_N.GetYear());
			printf("%d.%d.%d\n", semestr_1.GetDay(), semestr_1.GetMonth(), semestr_1.GetYear());

		  getch();
       
			
	}
}
то что в комментах для прошлого задания, это можно не учитывать.

Операция >> не выполняет ничего...

Set и Get методы я не писал сюда, уверяю, что они работают Если понадобятся - скину.
Praud вне форума Ответить с цитированием
Старый 02.06.2013, 19:22   #2
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Перегружать операторы смотрю никто не умеет
Praud вне форума Ответить с цитированием
Старый 02.06.2013, 23:43   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Тема ушла далеко вниз(
Praud вне форума Ответить с цитированием
Старый 02.06.2013, 23:50   #4
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Вот задание:

"В соответствии с вариантом задания перегрузить два оператора.
Перегрузка операторов осуществить для программы по лабораторной работе "Инкапсуляция. Создание класса". Для реализации операторов использовать готовые методы.

Продемонстрировать работу перегруженных операторов"

>> бинарный дружественный оператор разница между двумя датами
- унарный оператор класса отнять текущую дату


с оператором - я справился
Praud вне форума Ответить с цитированием
Старый 03.06.2013, 01:52   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Операция >> не выполняет ничего...
Так Вы и не "интересуетесь" тем, что вернул бинарный оператор.
a = b >> c;
Цитата:
Сообщение от Википедия
Бинарная операция (от лат. bi — два) — математическая операция, принимающая два аргумента и возвращающая один результат
Второй вопрос - способ получения разности между датами. Мне кажется, имеется ввиду честная разница между датами, выраженная в количестве лет, месяцев и дней между датами, а не простое почленное вычитание.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.06.2013, 16:54   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Так Вы и не "интересуетесь" тем, что вернул бинарный оператор.
a = b >> c;

Второй вопрос - способ получения разности между датами. Мне кажется, имеется ввиду честная разница между датами, выраженная в количестве лет, месяцев и дней между датами, а не простое почленное вычитание.
Все спасибо, очень помогли.
Задание переделал.
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов (С++) lolk Помощь студентам 2 31.05.2012 12:10
Перегрузка операторов riko782 Помощь студентам 10 06.05.2012 23:28
Перегрузка операторов Leo_ня Общие вопросы C/C++ 7 10.04.2011 15:52
Перегрузка операторов (С++) Перчитель Помощь студентам 1 03.12.2008 18:46
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15