用C++实现带对数的运算符重载

Jac*_*kin 2 c++ logarithm operator-overloading

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

我的第一个目标是如何实现这个changeBase方法,我一直很难绕过它.

我试图理解改变对数基数背后的数学,但我无法做到.有人可以向我解释一下吗?

我的第二个目标是能够执行左操作数为a 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 );
};
Run Code Online (Sandbox Code Playgroud)

你们真棒,谢谢你的时间.

Jam*_*lis 5

我的第二个目标是能够执行一个操作,其中左操作数是双操作数,右操作数是对数操作.

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

_log operator+(const double a, const _log& b);
Run Code Online (Sandbox Code Playgroud)

如果您需要访问私有成员_log,可以在以下定义中将其声明为朋友_log:

friend _log operator+(const double a, const _log& b);
Run Code Online (Sandbox Code Playgroud)

请注意,以下划线(例如_log)开头的名称保留给全局名称空间中的实现; 如果下划线后面跟一个大写字母或另一个下划线,则它随处可见.选择不同的班级名称是个好主意.