c++ - 在 C++ 中使用对数实现运算符重载

标签 c++ operator-overloading logarithm

我在使用 C++ 中的运算符重载实现对数类时遇到了一些问题。

我的第一个目标是如何实现 changeBase 方法,我一直在努力思考它。

我试图理解改变对数底数背后的数学原理,但我没能理解。有人可以给我解释一下吗?

我的第二个目标是能够执行左操作数是 double 且右操作数是对数对象的运算。

这是我的日志类的片段:

// coefficient: double
// base: unsigned int
// result: double
class _log {

 double coefficient, result;
 unsigned int base;

public:

 _log() {
  base = 10;
  coefficient = 0.0;
  result = 0.0;
 }
 _log operator+ ( const double b ) const;
 _log operator* ( const double b ) const;
 _log operator- ( const double b ) const;
 _log operator/ ( const double b ) const;
 _log operator<< ( const _log &b );

 double getValue() const;

 bool changeBase( unsigned int base );
};

你们真棒,感谢抽出时间。

最佳答案

My second goal is to be able to perform an operation where the left operand is a double and the right operand is a logarithm object.

为此,您需要在命名空间范围内将运算符声明为非成员函数(即不在 _log 的定义中),例如,

_log operator+(const double a, const _log& b);

如果您需要访问_log 的私有(private)成员,您可以在_log 的定义中将其声明为友元:

friend _log operator+(const double a, const _log& b);

请注意以下划线开头的名称(例如,_log)保留给全局命名空间中的实现使用;如果下划线后跟一个大写字母或另一个下划线,则它在任何地方都被保留。选择不同的类名是个好主意。

关于c++ - 在 C++ 中使用对数实现运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770355/

相关文章:

c++ - 在模板类中将对象作为重载 operator+ 的参数传递

python - 使用 matplotlib 在对数刻度上绘制连接线到零坐标点?

c++ - 缺少未使用的纯虚拟方法的实现时链接失败

c++ - 运算符 != 对于 std::reverse_iterator c++ 是不明确的

c++ - 为什么在上下文转换中不发生显式 bool() 转换

algorithm - 对《算法导论》一书中的 "c lg n"感到困惑 - 什么是 c?

integer - 如何简化Maxima CAS中的log(8)/log(2)?

c++ - 如何使用函数初始化静态常量成员

c++ - 使用 managed_shared_object 创建的 std::vector 是否需要同步?

c++ - 需要大尺寸静态数组