1. 程式人生 > >c++中運算子的過載

c++中運算子的過載

  • 為什麼要過載

運算子過載能夠讓一個運算子根據運算子兩側的型別呼叫不同的函式,實現多重功能,精簡優化程式碼。

  • 過載方式
  • 返回值 operator 運算子 (形參列表)

舉例:實現兩個時間相減功能,利用boost中的data_time庫 過載運算子減號 “-” 使用時包含標頭檔案

#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/lexical_cast.hpp>
#include <string>

類宣告:

class MyClassTimePro
{
public
: MyClassTimePro(string str_time);///str_time format : yyyy-mm-dd ~MyClassTimePro(); public: bool operator < (MyClassTimePro& o_time); int operator - (MyClassTimePro& o_time); int MonthNum(); int DayNum(); int YearNum(); private: int year; int month; int
day; };

///建構函式解析時間字串

MyClassTimePro::MyClassTimePro(string str_time)
{
    int pos1 = str_time.find("-");
    int pos2 = str_time.rfind("-");
    year = boost::lexical_cast<int>(str_time.substr(0, pos1));
    day= boost::lexical_cast<int>(str_time.substr(pos2 + 1));
    month = boost::lexical_cast<int>
(str_time.substr(pos1 + 1, pos2 - pos1 - 1)); }
  • 宣告:
int operator - (MyClassTimePro& o_time);
  • 定義:
int MyClassTimePro::operator - (MyClassTimePro& o_time)
{
    boost::gregorian::date data1(year, month, day);
    boost::gregorian::date data2(o_time.year, o_time.month, o_time.day);

    boost::gregorian::date_duration durl = data1 - data2;///已對date類進行了過載,因此能用 - 實現兩個物件的相減;

    return durl.days();
}

其實在上面的過載函式中,boost庫已對date類進行了過載。