gpt4 book ai didi

c++ - 在 Smalltalk 中设计事务管理器

转载 作者:行者123 更新时间:2023-11-30 01:55:50 25 4
gpt4 key购买 nike

我正在帮助一个 friend 在 Smalltalk 中设计一个程序(以前从未用 Smalltalk 编写代码,我只知道 c++),我需要从一个 txt 文件中读取交易并实现它。在某些情况下,我们可能会遇到不同的货币。在这种情况下,我需要从具有 date|currency1-currency2|currency2-currency1 汇率的表中获取货币汇率。所以我像这样模拟我的类(class):

  1. 读取交易文件。
  2. 对金额进行加法或减法。

在加减时,可能会有不同的货币,比如加元、美元。因此,如果当前账户有美元,我可能需要使用运算符重载将加元转换为美元。

所以,我有一个基类 Currency,派生类 Canadian dollar 和 dollar。我的运算符(operator)过度加载看起来像这样。

Currency& operator+(Currency& c) {
local_var + c.to_canadian_dollar();
}

uint32 to_canadian_dollor() {
return local_var * er.conversion_rate(); **<-- I need to pass date for the exchange rate function to get the exchange rate for today's date.**
}

问题是我需要传递转换率的日期,但我无法通过运算符重载传递日期。

还有其他人有更好的设计吗?或者闲聊中的任何语言功能可以让我在不破坏链条的情况下通过日期?我可以通过在交易前设置日期来使设计看起来丑陋。但只是好奇,是否有更好的设计可供我学习。

最佳答案

Smalltalk 没有运算符重载。因为它没有运营商。在 C++ 中,运算符和方法是不同但又有点相似的实体。在 Smalltalk 中,您只有方法。时期。所以当你在 Smalltalk 代码中看到 '+' 时,它不是一个运算符(因为它们不存在于 Smalltalk 中)。是发消息。左侧对象充当接收者,“+”方法以右侧对象作为唯一参数发送给它。

所以您可以做的是定义一个新的数字对象,将您的日期动态数据封装在其中。

您没有说您使用的是哪种 Smalltalk,但大多数风格都使用 double dispatch 模式来启用“数学感知”对象之间的先验数学。如果您提供有关问题的更多详细信息,也许我会通过此处的示例提供更多详细信息...

关于c++ - 在 Smalltalk 中设计事务管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com