gpt4 book ai didi

c++ - 重载运算符 '==' 时出现问题。需要能够使用模板处理字符串、 double 和日期

转载 作者:行者123 更新时间:2023-11-28 06:52:56 28 4
gpt4 key购买 nike

我有一个模板函数可以处理一个名为search 的变量,该变量可以是字符串、 double 或日期 类型。

重载运算符用于检查类 TransactionList 的实例(该帐户的每个银行交易的列表)是否与搜索相同,例如。给定交易的金额、名称或日期。

开关用于指示已采用哪个选项并通过搜索变量传递。

搜索变量到达但仅适用于金额 atm。我如何才能将所有三种数据类型合并到模板函数或重载运算符中?

需要使用 getAmount()、getTitle() 和 getDate()。

模板程序

template <typename T>
TransactionList TransactionList::getTransactionsForSearch(T search) const
{
TransactionList tempTrList(*this);
TransactionList trlAmount;
while (tempTrList.size() > 0 )
{
if(search == tempTrList.newestTransaction().getAmount())
/* commented out attempt
||search == tempTrList.newestTransaction().getTitle()
||search == tempTrList.newestTransaction().getDate()
*/
trlAmount.addNewTransaction(tempTrList.newestTransaction());
tempTrList.deleteFirstTransaction();
}

return trlAmount;
}

重载运算符

template<typename T>
bool TransactionList::operator==(const T& var )
{
return (var == tempTrList.newestTransaction().getAmount());
/*commented out attempt
||var == listOfTransactions_.newestTransaction().getDate()
||var == listOfTransactions_.newestTransaction().getTitle());
*/
}

最佳答案

我会避免重写 operator==(),因为这不是相等,而是匹配。因此,我选择在返回的 Transaction 上使用函数 match(),该函数使用正常重载检查金额、标题或日期。然后代码变为:

template <typename T>
TransactionList TransactionList::getTransactionsForSearch(T search) const {
TransactionList tempTrList(*this);
TransactionList trlAmount;
while (tempTrList.size() > 0 ) {
if(tempTrList.newestTransaction().matches(search))
trlAmount.addNewTransaction(tempTrList.newestTransaction());
tempTrList.deleteFirstTransaction();
}

return trlAmount;
}


bool Transaction::match(const double& search) const {
return search == tempTrList.newestTransaction().getAmount();
}

bool Transaction::match(const string& search) const {
return search == tempTrList.newestTransaction().getTitle();
}

bool Transaction::match(const date& date) const {
return search == tempTrList.newestTransaction().getDate();
}

添加更多搜索可能性只需要向 Transaction 类添加一个新的 match() 重载。

关于c++ - 重载运算符 '==' 时出现问题。需要能够使用模板处理字符串、 double 和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571859/

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