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对象内容进行输出,输出格式为:[* * * * * * *]
评论