c++标准类型扩展

C++ standard types extension

本文关键字:扩展 类型 标准 c++      更新时间:2023-10-16

如果我想添加计算绝对/相对误差的功能,我能做些什么?我可以简单地实现MyDouble类,它涵盖了所有的double函数,可以执行这个特定的操作,然后用这个类型"替换"double吗?

我想这样使用它:

  1. 写一些通常使用double类型的代码

  2. 在我的文件开头添加一些头文件,或者写一些像typedef double MyDouble

  3. 估计双值的误差,在我的代码中积累

类型定义不足以拥有您自己的类。如果需要累积错误、重载某些操作或定义额外的成员,则肯定需要一个成员来保存它们,还需要重载操作来定义错误传播规则。

开头:

class MyCDouble {
    double d; 
public: 
    MyCDouble(double x) : d(x) {}
    operator double() const { return d; }
    void analyze() {}; 
};

由于转换操作符和构造函数,可以像使用double类型一样使用该类。例如:

MyCDouble d = 3.14; 
MyCDouble e = sqrt(d); 
e.analyze(); 
cout << "sqrt of "<<d<<" is "<< e<<endl;
e = (d + 5)/3; 

现在,由您来添加错误管理和重载所需的内容。例如,您可以添加私有成员double error;,并重载传播错误的操作。例如,在类中可以添加:

 MyCDouble operator+ (MyCDouble x) {
     MyCDouble r = d+x; 
     r.error = max(r.error, x.error);  
     return r; 
 }