如何重新排序算术运算符的C ++标准优先级,以便减法具有更高的优先级

时间:2017-09-08 07:49:46

标签: c++ string oop operators calculator

我想制作一个计算器,它会问你算术运算符的优先级。例如优先级№1表示加法,№2表示除法,№3表示减法,№4表示乘法。 问题是:我是否需要使用过载运算符或只是简单地使用括号?

2 个答案:

答案 0 :(得分:1)

执行运算符重载时,无法操纵运算符的优先级。

通常,运算符优先级硬连线到与表达式关联的语法。例如,在C ++就是这种情况。

您的项目面临的挑战是您希望在运行时使语法更加灵活。此时您正在绊倒动态编程语言。有关详细信息,请参阅https://en.wikipedia.org/wiki/Dynamic_programming_language

当然,您想要做的是,但是您必须小心如何构建解析器和词法分析器。

答案 1 :(得分:0)

实际上,您可以使用运算符重载来实现操作运算符优先级的等效 - 它将涉及引入您自己的类并对它们执行操作。

当实现要降低优先级的操作时,可以通过存储2个值并存储操作或返回特定于该操作的类来实现它。 转换回结果时,您可以按所选顺序应用存储的操作。

优先级高于*: -

的示例
function clearAndSave() {
    // Clear fields
    nameInput.value = "";
    emailInput.value = "";
    var html = [];
    console.log(arraypeaople);
    for(i = 0; x <= arraypeaople.length - 1; i++){
        // Mark added rows to be able to remove them later
        html += "<tr class='added-row'>";
        html += "<td>" + arraypeaople[i].name + "</td>";
        html += "<td>" + arraypeaople[i].email + "</td>";
        html += "</tr>";
    }
    // Remove just the added rows
    $("#output").find(".added-row").remove(); 
    $("#output").append(html);  
}

但是在你的问题中,你说的只是使用括号 - 我不清楚你正在做什么,但如果你只是通过添加括号来做,那听起来就更简单了。