当前位置: 首页> 财经> 股票 > 沈阳网站制作流程_网站制作公司承担_百度seo优化排名如何_搭建网站教程

沈阳网站制作流程_网站制作公司承担_百度seo优化排名如何_搭建网站教程

时间:2025/9/3 6:10:05来源:https://blog.csdn.net/2301_80827065/article/details/146159634 浏览次数:2次
沈阳网站制作流程_网站制作公司承担_百度seo优化排名如何_搭建网站教程

通过实现日期类巩固C++中类和对象的学习,将 声明与定义 分离为三个文件,分别为Date.hDate.cppTest.cpp

一.Date.h

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<iostream>
#include<assert.h>
using namespace std;class Date
{//友员函数:可以访问当前类的私有成员变量//流提取运算符 >> 的使用习惯是 cin >> object 这种形式,其中 cin 是输入流对象,object 是要读取数据的对象。// 如果将 operator>> 实现为 Date 类的成员函数,那么其调用形式会变成 object >> cin,这与我们日常使用输入流的习惯不符。friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);
public:bool CheckDate() const;Date(int year = 1900, int month = 1, int day = 1);/*:_year(year),_month(month),_day(day)*/void Print() const;//inlineint GetMonthDay(int year, int month) const{assert(month > 0 && month < 13);static int monthDayArray[13]= { -1, 31, 28, 31, 30, 31, 30,31, 31, 30, 31, 30, 31 };//静态变量的生命周期是整个程序的运行期间。这对于 monthDayArray 很重要,//因为它存储的是每个月的天数,是一个固定不变的数据,不需要在每次使用后销毁。// 一旦程序开始运行,这个数组就会一直存在,随时可以被访问。if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){return 29;}return monthDayArray[month];}//第一个参数隐含了thisbool operator<(const Date& d) const;bool operator<=(const Date& d) const;bool operator>(const Date& d) const;bool operator>=(const Date& d) const;bool operator==(const Date& d) const;bool operator!=(const Date& d) const;Date operator+(int day) const;Date& operator+=(int day) ;Date operator-(int day) const;Date& operator-=(int day);//后置++:d1++//d1.operator(0)Date operator++(int);//(int) 是后置自增运算符重载特有的参数。Date& operator++();//d1--Date operator--(int);Date& operator--();//d1-d2int operator-(const Date& d) const;Date* operator&(){return this;//return (Date*)0x2673FF40;糊弄人用的}const Date* operator&() const{return this;}private:int _year;int _month;int _day;};
//二元操作符
ostream& operator<<(ostream& out, const Date& d);
istream& operator>>(istream& in, Date& d);

二.Date.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include"Date.h"bool Date::CheckDate() const
{if (_month < 1 || _month>12|| _day<1 || _day>GetMonthDay(_year, _month)){return false;}else{return true;}
}Date::Date(int year, int month, int day)
{_year = year;_month = month;_day = day;if (!CheckDate()){cout << "非法日期:";Print();}
}//void Date::Print(const Date* const this)
void Date::Print() const
{cout << _year << "/" << _month << "/" << _day << endl;
}//d1<d2
bool Date::operator<(const Date& d) const
{if (_year < d._year){return true;}else if (_year == d._year){if (_month < d._month){return true;}else if (_month == d._month){return _day < d._day;}}//_year > d._yearreturn false;
}//d1<=d2
bool Date::operator<=(const Date& d) const
{//代码复用return *this < d || *this == d;
}bool Date::operator>(const Date& d) const
{return !(*this <= d);
}bool Date::operator>=(const Date& d) const
{return !(*this < d);
}bool Date::operator==(const Date& d) const
{return _year == d._year&& _month == d._month&& _day == d._day;
}bool Date::operator!=(const Date& d) const
{return !(*this == d);
}Date Date::operator+(int day) const
{Date tmp = *this;tmp += day;return tmp;
}//d1+=100
Date& Date::operator+=(int day)
{if (day < 0){return *this -= (-day);}_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);++_month;if (_month == 13){_year++;_month = 1;}}return *this;
}//这里牵扯到代码的复用顺序
// 方案一:-=复用-
//Date Date::operator-(int day)
//{
//	Date tmp = *this;
//	tmp._day -= day;
//	while (tmp._day <= 0)
//	{
//		--tmp._month;
//		if (tmp._month == 0)
//		{
//			tmp._month = 12;
//			--tmp._year;
//		}
//
//		tmp._day += GetMonthDay(tmp._year, tmp._month);
//	}
//
//	return tmp;
//}
//
 d1 -= 100
//Date& Date::operator-=(int day)
//{
//	*this = *this - day;
//	
//	return *this;
//}//方案二:-复用-=
Date Date::operator-(int day) const
{Date tmp = *this;tmp -= day;return tmp;
}Date& Date::operator-=(int day)
{if (day < 0){return *this += (-day);}_day -= day;while (_day <= 0){--_month;if (_month == 0){_month = 12;--_year;}_day += GetMonthDay(_year, _month);}return *this;
}//++d
Date Date::operator++(int)
{Date tmp = *this;*this += 1;return tmp;
}//d++
Date& Date::operator++()
{*this += 1;return *this;
}//--d
Date Date::operator--(int)
{Date tmp = *this;*this -= 1;return tmp;
}//d--
Date& Date::operator--()
{*this -= 1;return *this;
}//d1-d2:相差天数
int Date::operator-(const Date& d) const
{//先默认前大后小int flag = 1;//标明正负Date max = *this;Date min = d;if (*this < d){max = d;min = *this;flag = -1;}int n = 0;//记录相差天数while (min != max){++min;++n;}return n * flag;
}ostream& operator<<(ostream& out, const Date& d)
{out << d._year << "年" << d._month << "月" << d._day << "日" << endl;return out;//可支持连续使用cout<<d1<<d2;
}
istream& operator>>(istream& in, Date& d)
{while (1){cout << "请依次输入年月日->";in >> d._year >> d._month >> d._day;if (!d.CheckDate()){cout << "输入的日期非法!";d.Print();cout << "请重新输入:" << endl;}else{break;}}return in;
}

三.Test.cpp(仅供参考)

#define _CRT_SECURE_NO_WARNINGS 1#include"Date.h"
//void Func1(const Date& d)
void Func1(Date d)
{cout << &d << endl;d.Print();
}//int main()
//{
//	Date d1(2025, 3, 10);
//
//	Date d2(d1);
//	cout << d1.operator==(d2)<<endl;//1:true
//	cout << (d1==d2)<<endl;
//	return 0;
//}//int main()
//{
//	Date d1(2025, 3, 10);
//	Date d2(2025, 4, 11);
//	cout << d2 - d1 << endl;
//	cout << d1 - d2 << endl;
//
//	//赋值重载拷贝
//	d1 = d2;
//
//	//拷贝构造
//	Date d3(d2);
//	Date d4 = d2;
//
//	cout << d1 << endl;
//	cout << d3 << endl;
//	cout << d4 << endl;
//
//	return 0;
//}
void TestDate1()
{Date d1(2025, 3, 10);Date d2 = d1 + 100;//Date d3(d1 + 100);d1.Print();d2.Print();//d1 += 100;//d1.Print();d1 += 30000;d1.Print();
}
void TestDate2()
{/*Date d1(2024, 7, 13);d1 -= 30000;d1.Print();*/Date d1(2024, 7, 13);Date ret1 = d1++;ret1.Print();d1.Print();Date d2(2024, 7, 13);Date ret2 = ++d2;ret2.Print();d2.Print();
}void TestDate3()
{Date d1(2024, 7, 12);d1 += -100;d1.Print();d1 -= -100;d1.Print();
}void TestDate4()
{Date d1(2034, 10, 1);Date d2(2024, 6, 31);cout << d1 - d2 << endl;
}void TestDate5()
{Date d1, d2;cin >> d1 >> d2;cout << d1 << d2;cout << d1 - d2 << endl;//cout << d1;//operator<<(cout, d1);//cout << d1 << d2;// 倒反天罡//d1 << cout;//d1.operator<<(cout);
}void TestDate6()
{const Date d1(2024, 7, 13);d1.Print();Date d2(2024, 7, 13);d2.Print();cout << &d1 << endl;cout << &d2 << endl;
}int main()
{TestDate6();return 0;
}
关键字:沈阳网站制作流程_网站制作公司承担_百度seo优化排名如何_搭建网站教程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: