国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】實(shí)現(xiàn)Date類的各種運(yùn)算符重載

這篇具有很好參考價(jià)值的文章主要介紹了【C++】實(shí)現(xiàn)Date類的各種運(yùn)算符重載。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【C++】實(shí)現(xiàn)Date類的各種運(yùn)算符重載,C++,c++,開發(fā)語言

上一篇文章只實(shí)現(xiàn)了operator==操作符重載,由于運(yùn)算符較多,該篇文章單獨(dú)實(shí)現(xiàn)剩余所有的運(yùn)算符重載。繼續(xù)以Date類為例,實(shí)現(xiàn)運(yùn)算符重載:
1.Date.h

#pragma once
 
#include <iostream>
#include <assert.h>

using namespace std;

class Date
{
private:
	int _year;
	int _month;
	int _day;
public:
	void Print();
	Date(int yaer, int month, int day);

	bool operator<(const Date& d);
	bool operator<=(const Date& d);
	bool operator>(const Date& d);
	bool operator>=(const Date& d);
	bool operator==(const Date& d);
	bool operator!=(const Date& d);

//單獨(dú)的用一個(gè)函數(shù)把每個(gè)月多少天,封裝起來
	int GetMonthDays(int year, int month)
	{
		assert(month > 0 && month < 13);

		static int MonthDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
		if (month==2&&(year % 4 == 0 && year % 100 != 0))
		{
			return 29;
		}
		return MonthDay[month];
	}

	Date& operator+=(int day);
	Date operator+(int day);

	Date& operator-=(int day);
	Date operator-(int day);
	//++d,前置++
	Date& operator++();
	//d++,后置++
	Date operator++(int);
	//前置--
	Date& operator--();
	//后置--
	Date operator--(int);

	//兩個(gè)日期相減:d1-d2
	int operator-(const Date& d);
};

Date.cpp

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>

#include "Date.h"

void Date::Print()
{
	cout << _year << "/" << _month << "/" << _day << endl;
}

Date::Date(int year=1, int month=1, int day=1)
{
	_year = year;
	_month = month;
	_day = day;
}
//   寫好一個(gè)直接復(fù)用!?。?/span>
bool Date::operator<(const Date& d)
{
	if (_year < d._year)
	{
		return true;
	}
	else if (_year == d._year)
	{
		if (_month < d._month)
			return true;
		else if ((_month == d._month) && (_day < d._day))
			return true;
		else
			return false;
	}
	else
		return false;
}

bool Date::operator==(const Date& d)
{
	if ((_year == d._year) && (_month == d._month) && (_day == d._day))
		return true;
	else
		return false;
}

bool Date::operator<=(const Date& d)
{
	return *this == d || *this < d;
}

bool Date::operator>(const Date& d)
{
	return !(*this <= d);
}

bool Date::operator>=(const Date& d)
{
	return (*this > d || *this == d);
}

bool Date::operator!=(const Date& d)
{
	return !(*this == d);
}

Date& Date::operator+=(int day)
{
	_day += day;//先加
	//這里是while,因?yàn)槿绻莍f的話,如果一次加了很大的數(shù)據(jù)減一次不一定能減得完!!!
	while(_day > GetMonthDays(_year, _month))
	{
		_day -= GetMonthDays(_year, _month);
		++_month;
		if (_month == 13)
		{
			++_year;
			_month = 1;
		}
	}
	return *this;
}

Date Date::operator+(int day)
{
	Date tmp=*this;

   
	tmp += day;
	return tmp;
}


Date& Date::operator-=(int day)
{
	_day -= day;
	while (_day <= 0)
	{
		--_month;
		if (_month == 0)
		{
			--_year;
			_month = 12;
		}
		_day += GetMonthDays(_year, _month);
	}
	return *this;
}


Date Date::operator-(int day)
{
	Date tmp = *this;
	tmp -= day;
	return tmp;
}

Date& Date::operator++()
{
	return *this += 1;
}

Date Date::operator++(int) 
{
	Date tmp = *this;
	
	*this += 1;
	return tmp;
}

Date& Date::operator--()
{
	*this - 1;
	return *this;
}

Date Date::operator--(int)
{
	Date tmp = *this;
	*this -= 1;
	return tmp;
}
//日期-日期,計(jì)算兩個(gè)日期之間相差多少天

int Date::operator-(const Date& d)
{
	int flag = 1;
	Date max = *this;
	Date min = d;

	if (*this < d)
	{
		//賦值為-1的原因:因?yàn)檫@個(gè)函數(shù)是有順序的d1-d2,如果遇到d1<d2,也就是小減大,最終返回的結(jié)果是個(gè)負(fù)數(shù),所以說這里要變成-1。
		flag = -1;
		max = d;
		min = *this;
	}
	//定義一個(gè)變量
	int n = 0;
	// 用循環(huán)算兩個(gè)日期中間的差值
	while (min != max)
	{
		++min;
		++n;
	}

	return n * flag;
}

3.Test.cpp文章來源地址http://www.zghlxwxcb.cn/news/detail-829692.html

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>
#include "Date.h"

int main()
{
	Date d1(2024, 2, 15);

	Date d2 = d1 + 20;
	d1.Print();
	d2.Print();

	bool ret=d1 > d2;
	if (ret)
	{
		d1.Print();
	}

	d2 += 100;
	d2.Print();


	d2 -= 100;
	d2.Print();
	Date d3 = d2 - 10;
	d3.Print();

	Date d4(2024, 1, 29);
	Date d5(2024, 8, 1);
	cout << d5 - d4 << endl;

	++d5;
	d5.Print();

	d5++;
	d5.Print();

	--d5;
	d5.Print();

	d5--;
	d5.Print();
	return 0;
}

到了這里,關(guān)于【C++】實(shí)現(xiàn)Date類的各種運(yùn)算符重載的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [C++] 類與對象(中)完整講述運(yùn)算符重載示例 -- 日期類(Date) -- const成員

    [C++] 類與對象(中)完整講述運(yùn)算符重載示例 -- 日期類(Date) -- const成員

    ? 目錄 1、前言 2、全缺省的構(gòu)造函數(shù) 3、打印接口 4、拷貝構(gòu)造 5、賦值運(yùn)算符重載(operator=) 5.1賦值重載是默認(rèn)成員函數(shù),重載格式: 5.2 賦值重載不能為全局函數(shù) 5.3 編譯器默認(rèn)生成 6、析構(gòu)函數(shù) 7、operator 8、operator== 9、operator= 10、operator 11、operator= 12、operator!= 13、operato

    2024年02月13日
    瀏覽(24)
  • C++從入門到精通——類的6個(gè)默認(rèn)成員函數(shù)之賦值運(yùn)算符重載

    C++從入門到精通——類的6個(gè)默認(rèn)成員函數(shù)之賦值運(yùn)算符重載

    類的6個(gè)默認(rèn)成員函數(shù):如果一個(gè)類中什么成員都沒有,簡稱為空類。 空類中真的什么都沒有嗎?并不是,任何類在什么都不寫時(shí),編譯器會自動(dòng)生成以下6個(gè)默認(rèn)成員函數(shù)。 默認(rèn)成員函數(shù):用戶沒有顯式實(shí)現(xiàn),編譯器會生成的成員函數(shù)稱為默認(rèn)成員函數(shù)。 C++為了增強(qiáng)代碼的

    2024年04月25日
    瀏覽(30)
  • 【C++】類和對象③(類的默認(rèn)成員函數(shù):拷貝構(gòu)造函數(shù) | 賦值運(yùn)算符重載)

    【C++】類和對象③(類的默認(rèn)成員函數(shù):拷貝構(gòu)造函數(shù) | 賦值運(yùn)算符重載)

    ?? 個(gè)人主頁: Forcible Bug Maker ?? 專欄: C++ 目錄 前言 拷貝構(gòu)造函數(shù) 概念 拷貝構(gòu)造函數(shù)的特性及用法 賦值運(yùn)算符重載 運(yùn)算符重載 賦值運(yùn)算符重載 結(jié)語 本篇主要內(nèi)容:類的6個(gè)默認(rèn)成員函數(shù)中的 拷貝構(gòu)造函數(shù) 和 賦值運(yùn)算符重載 在上篇文章中我們講到了類的默認(rèn)成員函數(shù)的

    2024年04月17日
    瀏覽(29)
  • 6-3 時(shí)鐘類的單目運(yùn)算符++重載

    已給出時(shí)鐘類及其成員函數(shù)實(shí)現(xiàn),要求補(bǔ)充完整運(yùn)算符++重載函數(shù)(前置和后置),使之能夠?qū)崿F(xiàn)時(shí)鐘對象自增1秒。 Clock類定義如下: 裁判測試程序樣例: 輸入樣例: 在這里給出一組輸入。例如: 10 10 10 輸出樣例: 在這里給出相應(yīng)的輸出。例如: 10:10:11 10:10:11 10:10:12 輸入

    2024年02月06日
    瀏覽(17)
  • 【C++】詳解運(yùn)算符重載,賦值運(yùn)算符重載,++運(yùn)算符重載

    【C++】詳解運(yùn)算符重載,賦值運(yùn)算符重載,++運(yùn)算符重載

    目錄 前言 運(yùn)算符重載 概念 目的 寫法 調(diào)用 注意事項(xiàng) 詳解注意事項(xiàng) 運(yùn)算符重載成全局性的弊端 類中隱含的this指針 賦值運(yùn)算符重載 賦值運(yùn)算符重載格式 注意點(diǎn) 明晰賦值運(yùn)算符重載函數(shù)的調(diào)用 連續(xù)賦值 傳引用與傳值返回 默認(rèn)賦值運(yùn)算符重載 前置++和后置++重載 先梳理一下

    2024年04月25日
    瀏覽(32)
  • 運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)

    ??博主主頁: @??. 一懷明月?? ????? 專欄系列: 線性代數(shù),C初學(xué)者入門訓(xùn)練,題解C,C的使用文章,「初學(xué)」C++ ?? 座右銘: “不要等到什么都沒有了,才下定決心去做” ??????大家覺不錯(cuò)的話,就懇求大家點(diǎn)點(diǎn)關(guān)注,點(diǎn)點(diǎn)小愛心,指點(diǎn)指點(diǎn)?????? 目錄 ??運(yùn)

    2024年02月08日
    瀏覽(53)
  • 【C++】運(yùn)算符重載案例 - 字符串類 ⑤ ( 重載 大于 > 運(yùn)算符 | 重載 小于 < 運(yùn)算符 | 重載 右移 >> 運(yùn)算符 - 使用全局函數(shù)重載 | 代碼示例 )

    使用 成員函數(shù) 實(shí)現(xiàn) 等于判斷 == 運(yùn)算符重載 : 首先 , 寫出函數(shù)名 , 函數(shù)名規(guī)則為 \\\" operate \\\" 后面跟上要重載的運(yùn)算符 , 要對 String a , b 對象對比操作 , 使用 大于 運(yùn)算符 , 使用時(shí)用法為 a b ; 函數(shù)名是 operate ; 然后 , 根據(jù)操作數(shù) 寫出函數(shù)參數(shù) , 參數(shù)一般都是 對象的引用 ; 要對

    2024年02月07日
    瀏覽(27)
  • C++:重載運(yùn)算符

    C++:重載運(yùn)算符

    1.重載不能改變運(yùn)算符運(yùn)算的對象個(gè)數(shù) 2.重載不能改變運(yùn)算符的優(yōu)先級別 3.重載不能改變運(yùn)算符的結(jié)合性 4.重載運(yùn)算符必須和用戶定義的自定義類型的對象一起使用,其參數(shù)至少應(yīng)該有一個(gè)是類對象,或類對象的引用 5.重載運(yùn)算符的功能要類似于該運(yùn)算符作用于標(biāo)準(zhǔn)類型數(shù)據(jù)

    2024年02月10日
    瀏覽(20)
  • 【C++】運(yùn)算符重載

    目錄 1. 基本概念 1.1 直接調(diào)用一個(gè)重載的運(yùn)算符函數(shù) 1.2 某些運(yùn)算符不應(yīng)該被重載 1.3 使用與內(nèi)置類型一致的含義 1.4 賦值和復(fù)合賦值運(yùn)算符 1.5 選擇作為成員或者非成員 2. 輸入和輸出運(yùn)算符 2.1 輸出運(yùn)算符重載 2.2 輸入運(yùn)算符重載 3. 算術(shù)和關(guān)系運(yùn)算符 3.1 算數(shù)運(yùn)算符重載 3.2

    2024年02月11日
    瀏覽(33)
  • C++——運(yùn)算符重載

    C++——運(yùn)算符重載

    運(yùn)算符重載,就是對已有的運(yùn)算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型。 運(yùn)算符重載的目的是讓語法更加簡潔 運(yùn)算符重載不能改變本來寓意,不能改變基礎(chǔ)類型寓意 運(yùn)算符重載的本質(zhì)是另一種函數(shù)調(diào)用(是編譯器去調(diào)用) 這個(gè)函數(shù)統(tǒng)一的名字叫opera

    2024年02月16日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包