我在使用 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/