c++ - 构造类的返回值

标签 c++ class c++11 operator-overloading

我正在尝试模仿 STL 类的类模板。我正在尝试将货币类作为一种新类型,以更好地处理我们系统中的货币。

这是我实验的一个非常粗略的草稿:

template <class T> class CURRENCY
{
    private:
        int p_iDollars;
        int p_iCents;
        int p_iPrecision = pow(10, 5);

    public:
        CURRENCY(T dStartingValue)
        {
            int p = this->p_iPrecision;
            double temp_dStartingValue = dStartingValue * p;
            this->p_iDollars = temp_dStartingValue / p;
            this->p_iCents = (dStartingValue - this->p_iDollars) * p;
        }

        CURRENCY operator+(T value)
        {
            this->p_iDollars = ((double) val()) + value;
        }

        CURRENCY operator-(T value)
        {
            this->p_iDollars = ((double) val()) - value;
        }

        CURRENCY operator*(T value)
        {
            this->p_iDollars = ((double) val()) * value;
        }

        CURRENCY operator/(T value)
        {
            this->p_iDollars = ((double) val()) / value;
        }

        CURRENCY operator= (int value)
        {
            this->p_iDollars = value;
        }

        double val()
        {
            return this->p_iDollars + ((double) this->p_iCents / this->p_iPrecision);
        }

        int dollars()
        {
            return this->p_iDollars;
        }

        int cents()
        {
            return this->p_iCents;
        }

};

我希望能够将此类实现为如下类型:

typedef CURRENCY<double> money;

int main()
{

    money m = 3.141592653589;

    m = m + 30;  // added assignment operator here

    cout << m << endl;

    return 0;

}

我想我什至不确定如何表达我所描述的内容,除了我想返回我的对象​​的当前“值”,因为我知道该对象实际上没有值(value)。我不确定如何允许我的类携带可以返回和操作的默认表示值。

在这种情况下,我想要 cout << m << endl;返回我的"new"值:33.1416 .

任何方向都会有所帮助,因为我只是想围绕这个概念进行思考。 注意:这段代码非常不完整,因为我正在试验,所以并不打算完全发挥作用,但请随时纠正任何逻辑问题或我前进的方向

我是个笨蛋,没有包括上面的作业......

最佳答案

首先,+ 和类似的运算符实际上并没有修改操作中涉及的对象,这意味着您必须创建一个新对象,然后从运算符函数返回该对象。

有点像

CURRENCY operator+(T value)
{
    CURRENCY temp(*this);

    temp.p_iDollars += value;

    return temp;
}

关于c++ - 构造类的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090537/

相关文章:

c++ - 类数组。栈还是堆?

c++ - 为什么 std::function 在 C++11 中不隐式转换为 bool?

c++ - 将 C++ 类拆分为文件现在不会编译

c++ - 为什么命名变量调用被解析为 T&& 而不是 const T&?

c++ - 为什么 std::boolalpha 在使用 clang 时忽略字段宽度?

c++ - 如何创建不同大小字符串的动态二维数组

c++ - 如何轻松更改 BOOST_LOG_TRIVIAL 的输出

c++ - 为什么可以间接地将右值绑定(bind)到左值引用而不是直接绑定(bind)?

c++ - 定义与声明类

c++ - 终止管家是什么意思?