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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2010, 18:34   #1
Сергей AfeR
Новичок
Джуниор
 
Регистрация: 21.01.2010
Сообщений: 1
По умолчанию Перегрузка операторов(С++)

Здравствуйте,помогите пожалуйста с перегрузкой операторов в С++
Использовал раздельную компиляцию,но не могу для перегрузки нужный алгоритм придумать =( Без перегрузки программа работает =((
Два оператора:
1)!= бинарный дружественный оператор разница между двумя датами
2)- унарный оператор класса отнять текущую дату

main.cpp

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include "CDateSubMonths.h"

int main(){

int bmonth=0;
char buf[32];
CDateSubMonths date_add_month_1;
CDateSubMonths date_add_month_2;


SetConsoleOutputCP(1251);
SetConsoleCP(1251);

printf("Введите дату:");
scanf("%s",buf);

printf("Введите кол-во месяцев: ");
scanf("%d",&bmonth);

if(!date_add_month_1.SetDateString( buf)){
printf("Данные введены неверно!");
return -1;

}

date_add_month_1.SubMonths(bmonth);
date_add_month_1.GetDateString(buf) ;
printf(buf);

printf("\nВведите текущую дату: ");
scanf("%s",buf);


date_add_month_2.GetDateString(buf) ;
date_add_month_2.GetNow(buf);

printf("\nРазница между датами составила: ");
printf(buf);


getch();
return 0;

}


CDateSubMonths.cpp

#include "CDateSubMonths.h"
#include <stdio.h>

int isLeapYear(int y) {
return (y%4==0)&&(y%100!=0)||(y%400==0);
}

// Constructor
CDateSubMonths::CDateSubMonths() {
date_y=0;
date_m=0;
date_d=0;
res_date_y=0;
res_date_m=0;
res_date_d=0;

m_month_days[0]=31;
m_month_days[1]=28;
m_month_days[2]=31;
m_month_days[3]=30;
m_month_days[4]=31;
m_month_days[5]=30;
m_month_days[6]=30;
m_month_days[7]=31;
m_month_days[8]=30;
m_month_days[9]=31;
m_month_days[10]=30;
m_month_days[11]=31;

}

// Destructor
CDateSubMonths::~CDateSubMonths() {
// echo /dev/brain >> /dev/null
}

// Установка
int CDateSubMonths::SetDateString(char *buf) {
int year, month,day;
sscanf(buf,"%04d-%02d-%02d",&year,&month,&day);
return SetYear(year)&&SetMonth(month)&&Set Day(day);
}

int CDateSubMonths::SetDay(int day) {
if(day>=1 && day<=m_month_days[date_m-1]) {
date_d=day;
return 1;
}else
return 0;
}

int CDateSubMonths::SetMonth(int month) {
if(month>=1 && month<=12){
date_m=month;
return 1;
}else
return 0;
}

int CDateSubMonths::SetYear (int year) {
if(year>=1 && year<=9999) {
date_y=year;

return 1;
}else
return 0;
}

void CDateSubMonths::SubMonths(int month){


int t_date_y=date_y,t_date_m=date_m,t_d ate_d=date_d;


t_date_m--;
for (int i=0;i<month;i++){
for (int j=0;j<31;j++){
t_date_d--;
if (t_date_d==0){
t_date_m--;
if (t_date_m==-1){
t_date_y--;
t_date_m=11;
}
t_date_d=m_month_days[t_date_m];
}
}
}

res_date_y=t_date_y;
res_date_m=t_date_m+1;
res_date_d=t_date_d;
}

int now_y=0;
int now_m=0;
int now_d=0;
void CDateSubMonths::GetDateString(char* buf){

sprintf(buf,"%04d-%02d-%02d",res_date_y,res_date_m,res_dat e_d);


}

void GetDateNow(char*buf){
sprintf(buf,"%04d-%02d-%02d",now_y,now_m,now_d);
}

/* int res_now_y=0;
int res_now_m=0;
int res_now_d=0;*/
int CDateSubMonths:perator -(int yy,mm,dd){

int res_now_y=yy;
int res_now_m=mm;
int res_now_d=dd;
if(dd>=1 && dd<=now_d) {
now_d-=dd;

}else
date_m--;



return 0;
}
void CDateSubMonths::GetNow(char*buf){
sprintf(buf,"%04d-%02d-%02d",res_now_y,res_now_m,res_now_d );
}


CDateSubMonths.h

class CDateSubMonths {
int date_y,date_m,date_d;
int res_date_y,res_date_m,res_date_d;
int m_month_days[12];
int now_y,now_m,now_d;
int res_now_y,res_now_m,res_now_d;
public:
CDateSubMonths();
~CDateSubMonths();

int SetDateString(char *buf);
int SetYear(int year);
int SetMonth(int month);
int SetDay(int day);

void SubMonths(int month);
void GetDateString(char*);
void GetDateNow(char*);
void GetNow(char*);
int operator-(yy,mm.dd);

};
Сергей AfeR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов raspberry Общие вопросы C/C++ 2 06.04.2010 00:19
Перегрузка операторов. Macb3th Общие вопросы C/C++ 5 01.04.2010 21:14
Перегрузка операторов (С++) Перчитель Помощь студентам 1 03.12.2008 18:46
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15