C++經典日期類實現

? ? ? ? 學完C++類和對象以及四個默認成員函數,就可以來嘗試自己實現一下日期類。完成日期類的各種功能,并加強自己的代碼能力。

日期類實現

定義一個日期類

// 文件:Date.h
#pragma once
#include <iostream>
using std::cout;
using std::endl;//定義日期類
class Date
{
public://直接寫到類里面的函數默認inline修飾//所以短小的代碼最好可以直接在類里面定義//構造函數Date(int year, int month, int day){_year = year;_month = month;_day = day;}//缺省構造Date(){}//析構函數、拷貝構造、賦值運算符重載編譯器自己實現//打印日期類void Print() {cout << "Date:" << _year << " " << _month << " " << _day << endl;}private://缺省賦值int _year = 0;int _month = 0;int _day = 0;
};

定義日期類的成員函數(方法)

// 文件:Date.h
class Date
{
public://...//邏輯運算符重載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);//日期加天數Date& operator+=(int day);Date operator+(int day);//日期減天數Date& operator-=(int day);Date operator-(int day);//日期++// 為了區分前置++和后置++// 后置++運算符重載函數中加入int類型占位Date& operator++();		//前置++Date& operator++(int);		//后置++//...
}

實現日期類的功能

// 文件:Date.cpp
#include "Date.h"
//小于
bool Date::operator<(const Date& d)
{if (_year < d._year){return true;}else if (_year == d._year &&  _month < d._month){return true;}else if (_year == d._year && _month == d._month && _day < d._day){return true;}return false;
}
//等于
bool Date::operator==(const Date& d)
{if (_year == d._year && _month == d._month && _day == d._day)return true;return false;
}
//不等于
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);
}
//大于于等于
bool Date::operator>=(const Date& d)
{return !(*this < d);
}int GetMonthDays(int year, int month)
{int common[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if ( month == 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)){return 29;}else{return common[month];}
}Date Date::operator+(int day)
{Date tmp = *this;tmp += day;return tmp;//Date tmp = *this;//tmp._day += day;//while (_day > GetMonthDays(tmp._year, tmp._month))//{//	day -= GetMonthDays(tmp._year, tmp._month);//	tmp._month++;//	if (tmp._month == 13)//	{//		tmp._month = 1;//		tmp._year++;//	}//}//return tmp;
}Date& Date::operator+=(int day)
{_day += day;while (_day > GetMonthDays(_year, _month)){_day -= GetMonthDays(_year, _month);_month++;if (_month == 13){_month = 1;_year++;}}return *this;
}Date& Date::operator-=(int day)
{_day -= day;while (_day < 0){_day += GetMonthDays(_year, _month - 1);_month--;if (_month == 0){_year--;_month = 1;}}if (_day == 0){_month--;_day = GetMonthDays(_year, _month);}return *this;
}Date Date::operator-(int day)
{Date tmp = *this;tmp -= day;return tmp;
}//前置++
Date& Date::operator++()
{*this += 1;return *this;
}
//后置++
Date& Date::operator++(int)
{Date tmp = *this;*this += 1;return tmp;
}

測試驗證

// 文件:test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "Date.h"int main()
{Date D1(2024, 3, 3);D1.Print();D1 -= 5;D1.Print();Date D2 = D1;D2.Print();D2++;D2.Print();return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言數組作為函數參數

有兩種情形&#xff1b; 一種是數組元素作為函數實參&#xff1b;一種是數組名作為函數參數&#xff1b; 新建一個VC6單文檔工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

Pthon圖像處理Opencv初步:色彩轉換、打開攝像頭

文章目錄 處理流程顏色空間二值圖像攝像頭 python圖像處理教程&#xff1a;初步&#x1f4f7;插值變換&#x1f4f7;形態學處理&#x1f4f7;濾波 處理流程 opencv是跨平臺圖像處理庫&#xff0c;為許多編程語言提供了接口&#xff0c;Python自然在列&#xff0c;但在使用pip…

32單片機基礎:PWM驅動舵機,直流電機

PWM驅動舵機 接線圖如上圖所示。注意&#xff0c;舵機的5V 線不能接到面包板上的正極&#xff0c;面包板上的正極只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我們如何驅動舵機呢&#xff1f;由之前我們介紹原理知道&#xff0c;要輸出如下圖對應的PWM波形才行…

AWTK 開源串口屏開發(11) - 天氣預報

# AWTK 開源串口屏開發 - 天氣預報 天氣預報是一個很常用的功能&#xff0c;在很多設備上都有這個功能。實現天氣預報的功能&#xff0c;不能說很難但是也絕不簡單&#xff0c;首先需要從網上獲取數據&#xff0c;再解析數據&#xff0c;最后更新到界面上。 在 AWTK 串口屏中…

數字革命的浪潮:Web3如何改變一切

隨著數字技術的不斷發展&#xff0c;人類社會正迎來一場前所未有的數字革命浪潮。在這個浪潮中&#xff0c;Web3技術以其去中心化、安全、透明的特性&#xff0c;正在逐漸改變著我們的生活方式、商業模式以及社會結構。本文將深入探討Web3技術如何改變一切&#xff0c;以及其所…

volatile關鍵字的作用 以及 單例模式(餓漢模式與懶漢模式的區別及改進)

文章目錄 &#x1f4a1;volatile保證內存可見性&#x1f4a1;單例模式&#x1f4a1;餓漢模式&#x1f4a1;懶漢模式&#x1f4a1;懶漢模式多線程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保證內存可見性 Volatile 修飾的變量能夠保證“內存可見性”以及防…

解決連接工具Mobaxterm連接錯誤Connection timed out----VMware里Linux端口號固定

錯誤&#xff1a;Connection timed out 原因&#xff1a; 沒有固定ip&#xff0c;網絡斷開&#xff0c;再次連接就是新的IP 解決&#xff1a; 再次測試連接&#xff0c;彈出這個就代表成功了

CUDA 中的線程組織

明朝那些事中有一句話&#xff1a;我之所以寫徐霞客是想告訴你&#xff0c;所謂千秋霸業萬古流芳&#xff0c;與一件事相比&#xff0c;其實都算不了什么&#xff0c;這件事情就是——用你喜歡的方式度過一生。 我們以最簡單的 CUDA 程序&#xff1a;從 GPU 中輸出 Hello World…

實現一個簡單的哈希映射功能

說在前面 &#x1f388;哈希表大家應該都經常用到吧&#xff0c;那么大家有沒有想過哈希表是怎么實現的呢&#xff1f;今天讓我們一起從一道簡單的題目來初步了解一個哈希表的簡單原理。 目的 不使用任何內建的哈希表庫設計一個哈希映射&#xff08;HashMap&#xff09;。 實…

bert 相似度任務訓練完整版

任務 之前寫了一個相似度任務的版本&#xff1a;bert 相似度任務訓練簡單版本,faiss 尋找相似 topk-CSDN博客 相似度用的是 0&#xff0c;1&#xff0c;相當于分類任務&#xff0c;現在我們相似度有評分&#xff0c;不再是 0,1 了&#xff0c;分數為 0-5&#xff0c;數字越大…

EasyRecovery易恢復2024免費文件數據恢復軟件下載

一、軟件概述 EasyRecovery易恢復中文文件數據恢復軟件是一款專為中文用戶設計的強大數據恢復工具。該軟件致力于幫助用戶從各種存儲設備中恢復因各種原因丟失的中文文件&#xff0c;如文檔、圖片、視頻、音頻等。憑借其核心技術和多年的研發經驗&#xff0c;EasyRecovery易恢…

C語言計算誤碼率

#include <stdio.h> #include <stdlib.h> bool dayintrue; //是否打印 int main(){ int i,k,g0; int n10,n20; int good0,bad0; double rate; (dayin)? printf("打印具體數據\n"):printf("不打印具體數據\n\n");…

STM32-SPI通信協議

串行外設接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司開發的一種通用數據總線。 在某些芯片上&#xff0c;SPI接口可以配置為支持SPI協議或者支持I2S音頻協議。 SPI接口默認工作在SPI方式&#xff0c;可以通過軟件把功能從SPI模式切換…

Python·算法·每日一題(3月4日)最長公共前綴

題目 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 “”。 示例 示例 1&#xff1a; 輸入&#xff1a;strs ["flower","flow","flight"] 輸出&#xff1a;"fl"示例 2&#xff1a;…

【數據結構與算法】常見排序算法(Sorting Algorithm)

文章目錄 相關概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 直接插入排序&#xff08;Insertion Sort&#xff09;3. 希爾排序&#xff08;Shell Sort&#xff09;4. 直接選擇排序&#xff08;Selection Sort&#xff09;5. 堆排序&#xff08;Heap Sort&#xff09;…

【腦科學相關合集】有關腦影像數據相關介紹的筆記及有關腦網絡的筆記合集

【腦科學相關合集】有關腦影像數據相關介紹的筆記及有關腦網絡的筆記合集 前言腦模板方面相關筆記清單 基于腦網絡的方法方面數據基本方面 前言 這里&#xff0c;我將展開有關我自己關于腦影像數據相關介紹的筆記及有關腦網絡的筆記合集。其中&#xff0c;腦網絡的相關論文主要…

【錯誤處理】【Hive】【Spark】ERROR FileFormatwriter: Aborting job null.

問題背景 近日&#xff0c;使用 Spark 在讀寫 Hive 表時發生了報錯&#xff1a;Aborting job null&#xff0c;如果怎么都使用不了那張表的話&#xff0c;大概率是那張表有臟數據&#xff0c;導致整張表無法正常使用。 ERROR FileFormatwriter: Aborting job null.解決方法 …

SpringBoot 如何快速過濾出一次請求的所有日志?

前言 在現網出現故障時&#xff0c;我們經常需要獲取一次請求流程里的所有日志進行定位。如果請求只在一個線程里處理&#xff0c;則我們可以通過線程ID來過濾日志&#xff0c;但如果請求包含異步線程的處理&#xff0c;那么光靠線程ID就顯得捉襟見肘了。 華為IoT平臺&#x…

《自然》:人工智能在創造性思維方面超越人類

發散性思維被認為是創造性思維的指標。ChatGPT-4 在三項有151名人類參與的**發散思維測試中&#xff0c;**展現出比人類更高水平的創造力&#xff0c;結果顯示人工智能在創意領域持續發展。 發散性思維的特點是能夠針對沒有預期解決方案的問題提出獨特的解決方案&#xff0c;例…

TOMCAT的安裝與基本信息

一、TOMCAT簡介 Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和并發訪問用戶不是很多的場合下被普遍使用&#xff0c;是開發和調試JSP 程序的首選。對于一個初學者來說&#xff0c;可以這樣認為&#xff0c…