C ++标准类型扩展

时间:2015-08-13 15:44:34

标签: c++ types double

如果我想添加用于计算double的绝对/相对错误的功能,我该怎么办?我可以简单地实现MyDouble类,它涵盖所有双重功能并可以执行此特定操作,然后用这种类型'替换'double?

(我想这样使用它:

  1. 通常用双重类型编写一些代码

  2. 在我的文件开头添加一些头文件或写一些类似typedef double MyDouble

  3. 的内容
  4. 估算双值的错误,在我的代码中累积

  5. 删除我在第2点放入文件的内容

1 个答案:

答案 0 :(得分:2)

typedef不足以拥有自己的课程。如果您需要累积错误,重载某些操作,或者定义其他成员,您当然需要一个成员来保存它们,并且还需要重载操作来定义错误传播规则。

这是一个开始:

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

由于转换运算符和构造函数,您可以将此类用作双精度数。例如:

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; 
 }