#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 constexpr MyDistance operator/(const MyDistance& a, int n){ return MyDistance(a.m/n); } 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; constexpr Distance::MyDistance getAverageDistance(std::initializer_list inList){ auto sum= Distance::MyDistance(0.0); for ( auto i: inList) sum += i; return sum/inList.size(); } int main(){ 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 myDistancePerWeek1= 4 * workPerDay - 3 * abbrevationToWork + workout + shopping; constexpr Distance::MyDistance myDistancePerWeek2= 4 * workPerDay - 3 * abbrevationToWork + 2* workout; constexpr Distance::MyDistance myDistancePerWeek3= 4 * workout + 2* shopping; constexpr Distance::MyDistance myDistancePerWeek4= 5* workout + shopping; constexpr Distance::MyDistance perMonth= getAverageDistance({myDistancePerWeek1,myDistancePerWeek2,myDistancePerWeek3,myDistancePerWeek4}); std::cout << "Average per week: " << averagePerWeek << std::endl; std::cout << std::endl; }