C++ 标准类型扩展

标签 c++ types double

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

(我想这样使用它:

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

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

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

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

最佳答案

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

这是一个开始:

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; 

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

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

关于C++ 标准类型扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992869/

相关文章:

C++子类将父类的名称误认为字段

c++ - 如何在没有大量代码的情况下将 A 类的纯虚方法绑定(bind)到两者的子类 B 的方法?

sql - 存储高度的最佳数据类型是什么?

php - MySQL 的 TEXT 类型的 Oracle 等价物

java - Eclipse 双分隔符从逗号 (,) 到点 (.)

c++ - Qt - 制作一个与 QGraphicsView 重叠的面板

c++ - 数据结构与 yaml-cpp 接口(interface)的设计技巧?

.net - 对单字符值使用 char 而不是 string 有什么好处吗?

java - 旋转 - 缺乏精度 - Java

c# - 如何解决在 C# 中获取 "0"的双模问题