做視頻網(wǎng)站怎么掙錢上海關(guān)鍵詞優(yōu)化推薦
寫在前面
本篇里面的日期類型加法,先不考慮閏年,平年的天數(shù),每月的天數(shù)統(tǒng)一按30天算,那么每一年也就是360天
目錄
寫在前面
定義
基本數(shù)據(jù)類型
自定義數(shù)據(jù)類型
成員函數(shù)解決相加問題
Date類+整形
下一篇----運算符重載的規(guī)則
定義
運算符重載是對已有的運算符進行重新定義,賦予另一種功能,以適應(yīng)不同的數(shù)據(jù)類型。
基本數(shù)據(jù)類型
例如“+”,對于整形,浮點型進行加法運算,如下的程序段:
int a=2,b=3,c;
c=a+b;//c=5
double x=2.5,y=4.3,z;
z=x+y;//z=6.8
對于這段代碼,為什么同一個運算符“+”可以運用于不同類型的數(shù)據(jù)進行加法運算呢?
這是因為C++已經(jīng)對運算符“+”進行的運算符重載。所以“+”運算符才可以適用于整形,浮點型數(shù)據(jù)的加法運算。
在上面的程序中,如果運算符“+”兩邊是整形,那么編譯器就會調(diào)用執(zhí)行整形加法的運算符“+”重載函數(shù);同樣,如果運算符“+”兩邊是浮點型,那么編譯器就會調(diào)用執(zhí)行浮點型的運算符“+”重載函數(shù);如果運算符兩邊是一個整形一個浮點型進行運算,我們知道結(jié)果肯定是一個浮點型(偏向精度高的),那么編譯器是怎么 編譯的,首先編譯器會調(diào)用一個特殊的函數(shù),把整形數(shù)據(jù)轉(zhuǎn)為 浮點型數(shù)據(jù),然后調(diào)用執(zhí)行浮點型的運算符“+”的重載函數(shù)。
自定義數(shù)據(jù)類型
C++中預(yù)定義的運算符操作對象只能是基本數(shù)據(jù)類型。實際上,對于我們自定義的類型(類),也需要進行類似的操作運算,可以直接用“+”來加減;
例如:對于日期這個類, 我想要直接知道當前日期加上n天之后,是何年何月何日。
下面是一個關(guān)于日期的類:
#include<iostream>
using namespace std;
class Date
{
public:Date(){Year = 1;Month = 1;Day = 1;}Date(int year,int month,int day){Year = year;Month = month;Day = day;}void DatePrint(){cout << Year << '/' << Month << '/' << Day << endl;}
private:int Year;int Month;int Day;
};int main()
{Date d1(2024, 4, 15);//Date d2 = d1+6;//4月21日d1.DatePrint();//2024/4/15//d2.DatePrint();return 0;
}
若要給d加上6,是不能實現(xiàn)的,不能實現(xiàn)的原因是,運算符“+”一個是整形,另一個是Date類,Date類不是預(yù)定義的基本數(shù)據(jù)類型。
如果需要對Date類進行加法運算,我們可以運用成員函數(shù)的方法來解決這個問題,每次相加的時候調(diào)用對應(yīng)函數(shù),相加就可以得到想要的結(jié)果。
成員函數(shù)解決相加問題
Date類+整形
也就是我們想要知道當前日期幾天是何年何月何日,整形代表一個天數(shù),直接加到Day上,
Day超過30,Month加1,Day減30,
Month超過12,Year加1,Month減12
代碼結(jié)果如下
#include<iostream>
using namespace std;
class Date
{
public:Date(){Year = 1;Month = 1;Day = 1;}Date(int year,int month,int day){Year = year;Month = month;Day = day;}void DatePrint(){cout << Year << '/' << Month << '/' << Day << endl;}Date Addint(int day){int month = 0,year=0;year = day/360;//加的天數(shù)里面有多少年day = day % 360;//把年減了之后有多少天month = day / 30;//剩下的天數(shù)里面有多少個月day %= 30;//把月減了之后有多少天Year += year;Month += month;Day += day;return *this;}
private:int Year;int Month;int Day;
};int main()
{Date d1(2024, 4, 15);cout << "相加之前d1:";d1.DatePrint();//2024/4/15d1.Addint(6);//4月21日cout << "相加之后d1:";d1.DatePrint();return 0;
}
運行結(jié)果如下:
在來一個例子吧,算一下2000天后是多少年幾月幾號(注意這里沒有使用日期規(guī)則)
這樣也可以實現(xiàn)相加,但是我們也希望可以在類中使用運算符("+","-","=="...)
d2=d1+6,這樣就需要重載運算符“+”來解決。
下一篇----運算符重載的規(guī)則
我們在介紹怎么使用運算符重載