#include #include namespace Distance{ class MyDistance{ public: constexpr MyDistance(double i):m(i){} friend constexpr MyDistance operator +(const MyDistance& a, const MyDistance& b){ return MyDistance(a.m + b.m); } friend constexpr MyDistance operator -(const MyDistance& a, const MyDistance& b){ return MyDistance(a.m - b.m); } friend constexpr MyDistance operator*(double m, const MyDistance& a){ return MyDistance(m*a.m); } friend std::ostream& operator<< (std::ostream &out, const MyDistance& myDist){ out << myDist.m << " m"; return out; } private: double m; }; namespace Unit{ MyDistance constexpr operator "" _km(long double d){ return MyDistance(1000*d); } MyDistance constexpr operator "" _m(long double m){ return MyDistance(m); } MyDistance constexpr operator "" _dm(long double d){ return MyDistance(d/10); } MyDistance constexpr operator "" _cm(long double c){ return MyDistance(c/100); } } } using namespace Distance::Unit; int main(){ std:: cout << std::endl; std::cout << "1.0_km: " << 1.0_km << std::endl; std::cout << "1.0_m: " << 1.0_m << std::endl; std::cout << "1.0_dm: " << 1.0_dm << std::endl; std::cout << "1.0_cm: " << 1.0_cm << std::endl; std::cout << "1.5_km + 105.1_m: " << .5_km + 105.1_m << std::endl; std::cout << std::endl; constexpr Distance::MyDistance work= 63.0_km; constexpr Distance::MyDistance workPerDay= 2 * work; constexpr Distance::MyDistance abbrevationToWork= 5400.0_m; constexpr Distance::MyDistance workout= 2 * 1600.0_m; constexpr Distance::MyDistance shopping= 2 * 1200.0_m; constexpr Distance::MyDistance myDistancePerWeek= 4 * workPerDay - 3 * abbrevationToWork + workout + shopping; std::cout << "4 * workPerDay - 3 * abbrevationToWork + workout + shopping: " << myDistancePerWeek; std::cout << "\n\n"; }