繁体   English   中英

我有一个代表整数的类,我想区分lbs和kg我该怎么做?

[英]I have a class to represent integers and I want to differentiate between lbs and kg how do I do this?

我正在考虑为lbs创建一个类,为kg创建一个单独的类,它们都从整数继承但不向它们添加任何内容。 这将允许编译器验证正确的单元是否传递给函数。

这是最好的方法还是有更好的方法呢?

就个人而言,我会有一个名为Mass或类似的类,并且有一些方法可以在一个单元或另一个单元中返回对象的值。

class Mass
{
public:
  Mass()
    : mMassKG(0) {}
  ~Mass() {}

  int kilograms() const { return mMassKG; }
  int pounds() const { return mMassKG * 2.2; }

  void setKilograms(int kg) { mMassKG = kg; }
  void setPounds(int lbs) { mMassKG = lbs / 2.2; }

private:
  int mMassKG;
};

为什么不创建一个获取整数(setter)并返回getKg或getLbs方法的类?

您能举例说明您需要的各种功能吗? 根据您的需要,您可能最好为lbs和kgs进行单独的方法调用,例如

public void doXlbs() {
    ...
}

public void doXkgs() {
    ...
}

彻底未经测试,但这样的事情可以解决问题并提供合理的类型安全性:

template<typename T>
class Unit
{
public:
   explicit Unit(float size) : m_size(size) {}
   float size() const { return m_size; }
   Unit operator += (Unit rhs) { m_size += rhs.size();  return *this; }
private:
   float m_size;
};

template<typename T>
Unit<T> operator+ (Unit<T> lhs, Unit<T> rhs) 
{
   return lhs += rhs;
}
// Plus more useful operators that you need...

struct Kg {};
struct Lb {};

typedef Unit<Kg> Kilograms;
typedef Unit<Lb> Pounds;

Kilograms lbToKg(Pounds lb)
{
   return Kilograms(lb.size() / 2.2);
}

Pounds kgToLb(Kilograms kg)
{
   return Pounds(kg.size() * 2.2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM