正文

OF描述量纲的类——dimensionSet2008-09-04 12:22:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bioexplore/38078.html

分享到:

dimensionSet类
该类封装了量纲信息及对量纲的相关运算操作,是实现计算中物理量量纲运算与处理的接口类。

该类首先定义了两个公有枚举类型:
enum{ nDimensions=7 };  //国际单位制中规定了7个标准单位,这些单位在下一个枚举类型中定义
enum dimensionType{ MASS,   //质量,单位是kg
   LENGTH,  //长度,单位是m
   TIME,   //时间,单位是s
   TEMPERATURE,  //温度,单位是K
   MOLES,   //摩尔数,单位是mol
   CURRENT,  //电流,单位是A(安培)
   LUMINOUS_INTENSITY  //光强,单位是Cd(坎德拉)
  };

保存的私有成员变量:
scalar exponents_[nDimesions]; //用于保存7个标准单位的相应幂指数,例如:
 exponents_[MASS],  //就表示质量单位的幂指数。  exponents_[TIME],  //表示时间单位的幂指数. ……

静态常量smallExponent保存SMALL,主要用来判断各个单位的幂指数是否足够小<abs(SMALL),若在上述范围则表明该单位的量纲是0

该类具有三个构造函数,原型分别如下:
dimensionSet( const scalar mass,
  const scalar length,
  const scalar time,
  const scalar temperature,
  const scalar moles,
  const scalar current,
  const scalar luminousIntensity
      );      分别给出七个标准单位每个单位的幂指数对类进行构造
dimensionSet( const scalar mass,
  const scalar length,
  const scalar time,
  const scalar temperature,
  const scalar moles
      ); 分别给出前五个常用的单位的幂指数,而其它两个单位指数为0,对类进行构造
dimensionSet( Istream& is);  //将从输入对象is的引用对该对象进行构造,将调用类友元函数operator>>来完成构造

由于该类是作为量纲的对象,该类还提供如下两个成员函数:
bool dimensionless() const;   //判断该对象所附的变量是否为无量纲量,是返回true,否返回false,这里就用到了smallExponent
void reset(const dimensionSet&);  //将当前对象的量纲设置为和所给参数的量纲

对于量纲的相应运算和操作,该类通过提供如下操作符成员函数和全局友元函数来实现:
1、操作符函数(9个):
 scalar operator[](const dimensionType dt) const; 
 scalar operator[](const dimensionType dt);   //这两个为下标操作符,用于查看当前量纲中某一单位的幂指数
 bool operator==(const dimensionSet& ds) const;  //判断与给出的量纲是否相同,同样用到smallExponent
 bool operator!=(const dimensionSet& ds) const; //与上相反,判断是否不同量纲
 bool operator=(const dimensionSet& ds) const; //若量纲不同且开启该类的debug选项则报错退出,否则返回true
 bool operator+=(const dimensionSet& ds) const; //为了实现具量纲变量的+=操作而设置的操作符
 bool operator-=(const dimensionSet& ds) const; //为了实现具量纲变量的-=操作而设置的操作符
 bool operator*=(const dimensionSet& ds);  //为了实现具量纲变量的*=操作而设置的操作符
 bool operator/=(const dimensionSet& ds);  //为了实现具量纲变量的/=操作而设置的操作符
2、全局友元[操作符]函数:
 friend dimensionSet max(const dimensionSet&, const dimensionSet&); //为实现具量纲变量的max比较函数而设置的友元
 friend dimensionSet min(const dimensionSet&, const dimensionSet&); //为实现具量纲变量的min比较函数而设置的友元
 friend dimensionSet scale(const dimensionSet&, const dimensionSet&); //为实现具量纲变量的相乘而设置的友元

        friend dimensionSet pow(const dimensionSet&, const scalar); //为实现具量纲变量的数值幂而设置的友元幂函数
        friend dimensionSet pow(const dimensionSet&, const dimensionedScalar&); //与上一函数同,只是给出的第二个参数必须为无量纲标量
        friend dimensionSet pow(const dimensionedScalar&, const dimensionSet&); //??返回第二个参数

        friend dimensionSet sqr(const dimensionSet&); //求所给量纲的乘方
        friend dimensionSet pow3(const dimensionSet&); //求所给量纲的三次方
        friend dimensionSet pow4(const dimensionSet&); //求所给量纲的四次方

        friend dimensionSet sqrt(const dimensionSet&); //求所给量纲的开方
        friend dimensionSet magSqr(const dimensionSet&); //与sqr相同,为具量纲变量的乘方运算而设
        friend dimensionSet mag(const dimensionSet&);  //返回所给参数,为具量纲变量的mag运算而设
        friend dimensionSet sign(const dimensionSet&);  //返回dimless常量,即无量纲,为具量纲变量的sign运算而设
        friend dimensionSet pos(const dimensionSet&);  //与上同,为具量纲变量的pos运算而设
        friend dimensionSet neg(const dimensionSet&);  //与上同,为具量纲变量的neg运算而设
        friend dimensionSet operator-(const dimensionSet&); //返回参数本身,为具量纲变量的取负运算而设

        friend dimensionSet operator+
        (
            const dimensionSet&,
            const dimensionSet&
        );  //返回第一个参数,首先判断两变量量纲是否相同,若不相同则报错,为具量纲变量的相应运算而设

        friend dimensionSet operator-
        (
            const dimensionSet&,
            const dimensionSet&
        );  //与上面+运算符类似

        friend dimensionSet operator*
        (
            const dimensionSet&,
            const dimensionSet&
        );  //两量纲的乘法运算,相同单位的幂指数相加

        friend dimensionSet operator/
        (
            const dimensionSet&,
            const dimensionSet&
        );  //量纲的除法运算,相同单位的幂指数相减

        friend dimensionSet operator&
        (
            const dimensionSet&,
            const dimensionSet&
        );  //同operator*(const dimensionSet&,const dimensionSet&)

        friend dimensionSet operator^
        (
            const dimensionSet&,
            const dimensionSet&
        );  //同operator*(const dimensionSet&,const dimensionSet&)

        friend dimensionSet operator&&
        (
            const dimensionSet&,
            const dimensionSet&
        );    //同operator*(const dimensionSet&,const dimensionSet&)

        friend Istream& operator>>(Istream&, dimensionSet&);  //从输入流中读取数据,构造dimensionSet对象
        friend Ostream& operator<<(Ostream&, const dimensionSet&);  //将dimensionSet对象内容进行输出,输出格式为:[* * * * * * *]

阅读(4411) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册