물리적 특성 단위에 대해 11 개의 사용자 정의 리터럴을 사용하는 방법을 배우려고합니다. 문제는 어떻게 이러한 유닛들의 혼합을 피하는가하는 것입니다. 그렇게 (8.0_kg + 8.0_km) -> 오류가 발생합니다. 어떤 아이디어 야? 나는 C++을 처음 접했습니다.C++ 물리적 특성 단위에 대해 11 개의 사용자 정의 리터럴
class Mass{
public:
//Mass(){
// cout << "only Mass units allowed in here" << endl;
//}
//~Mass();
long double getWeight(long double a);
double car, house, cat;
private:
long double a;
};
long double Mass::getWeight(long double w) {
cout << "returning argument: " << w << '\n'<< endl;
return 0;
}
long double operator"" _km(long double d) { return d * 1000.0; }
long double operator"" _m (long double d) {return d;}
long double operator"" _cm(long double d) { return d/100.0; }
long double operator"" _tonne(long double m) { return m * 1000.0 ; }
long double operator"" _kg(long double m) { return m ; }
long double operator"" _lb(long double m) { return m * 0.453592; }
long double getDistance(long double d){
long double starting_d = 61.0_kg;
long double total_d = d + starting_d;
cout << "the distance I have run is: " << total_d << endl;
return 0;
}
int main() {
cout << 6.0_km << endl;
cout << 6.0_km + 3.0_m << endl;
cout << 6.0_km + 3.0_m + 15.0_cm << '\n' << endl;
cout << 8.0_tonne << endl;
cout << 8.0_km + 4.0_kg << endl;
cout << 8.0_km + 4.0_kg + 21.0_lb << '\n' << endl;
long double distance = 5.45_km;
getDistance(distance);
Mass obj1;
obj1.getWeight(13.96_lb);
cout << "This is clearly wrong: "<< 8.0_km + 4.0_kg << endl;
obj1.getWeight(10.96_km); // so is this
}
그냥'long double' 대신 ('struct' /'class') 타입으로 만들 것입니다. – NathanOliver
[strong typedef] (http://stackoverflow.com/questions/28916627/strong)에서보실 수 있습니다. -typedefs)를 입력하십시오. – Jarod42