#include <iostream>
#include <chrono>
 
 
using namespace std;
 
 
class Length
{
private:
    const long double _value;
    Length(long double value) : _value(value)
    {
 
    }
 
    friend Length operator"" _m(unsigned long long value);
    friend Length operator"" _m(long double value);
    friend Length operator"" _km(unsigned long long value);
    friend Length operator"" _km(long double value);
    friend Length operator"" _mm(unsigned long long value);
    friend Length operator"" _mm(long double value);
    friend Length operator"" _cm(unsigned long long value);
    friend Length operator"" _cm(long double value);
 
public:
    long double m() const { return _value; }
    long double km() const { return _value * 0.001; }
    long double mm() const { return _value * 1000; }
    long double cm() const { return _value * 100; }
 
    Length operator+() const
    {
        return Length(_value);
    }
 
    Length operator-() const
    {
        return Length(-_value);
    }
 
    Length operator+(const Length& length) const
    {
        return Length(_value + length._value);
    }
 
    Length operator-(const Length& length) const
    {
        return Length(_value - length._value);
    }
};
 
Length operator"" _m(unsigned long long value)
{
    return Length(value);
}
 
Length operator"" _m(long double value)
{
    return Length(value);
}
 
Length operator"" _km(unsigned long long value)
{
    return Length(value * 1000L);
}
 
Length operator"" _km(long double value)
{
    return Length(value * 1000L);
}
 
Length operator"" _mm(unsigned long long value)
{
    return Length(value * 0.001L);
}
 
Length operator"" _mm(long double value)
{
    return Length(value * 0.001L);
}
 
Length operator"" _cm(unsigned long long value)
{
    return Length(value * 0.01L);
}
 
Length operator"" _cm(long double value)
{
    return Length(value * 0.01L);
}
 
int main()
{
    // 표준 라이브러리에서 사용하는 사용자 정의 리터럴
    chrono::minutes m = 24h + 5min;
    cout << m.count() << endl;
 
    Length len = 1_m + 1_km + 1_cm + 1_mm;
    cout.precision(16);
    cout << len.m() << endl;
    cout << len.km() << endl;
    cout << len.cm() << endl;
    cout << len.mm() << endl;
}
cs

'::public > C++' 카테고리의 다른 글

가상 함수  (0) 2020.11.27
상속의 기본  (0) 2020.11.27
호출 연산자 오버로딩, 함수 객체  (0) 2020.11.23
변환 연산자 오버로딩, 변환 생성자  (0) 2020.11.23
대입 연산자 오버로딩, 복사 생성자  (0) 2020.11.23

+ Recent posts