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,这里就用到了smallExponentvoid 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对象内容进行输出,输出格式为:[* * * * * * *]

评论