【问题标题】:how to distinguish among two similar operator overloading in C++ [duplicate]如何区分C ++中的两个相似的运算符重载[重复]
【发布时间】:2020-08-03 02:46:48
【问题描述】:

我有这段 C++ 代码来重载前置增量和后置增量运算符。 这些方法之间的唯一区别是它们的参数数量。

我想知道 C++ 如何理解在运行 y=++x 和 z=x++ 命令时应该调用哪个方法(前增量或后增量)。

class location {
 
    private:  int longitude, latitude;
 
    public:
        location(int lg = 0, int lt = 0) { longitude = lg; latitude = lt; }
 
        void show() { cout << longitude << "," << latitude << endl; }
 
        location operator++();     // pre-increment
        location operator++(int);  // post-increment
};
 
// pre-increment
location location::operator++() {  // z = ++x;
 
    longitude++;
    latitude++;
    return *this;
}
 
// post-increment
location location::operator++(int) {  // z = x++;
 
    location temp = *this;
    longitude++;
    latitude++;
    return temp;
}
 
int main() {
 
    location x(10, 20), y, z;
    cout << "x = ";
    x.show();
    ++x;
    cout << "(++x) -> x = ";
    x.show();
 
    y = ++x;
    cout << "(y = ++x) -> y = ";
    y.show();
    cout << "(y = ++x) -> x = ";
    x.show();
 
    z = x++;
    cout << "(z = x++) -> z = ";
    z.show();
    cout << "(z = x++) -> x = ";
    x.show();
}

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    实质上缺少 ++ 重载中的参数会告诉 c++ 您正在创建前缀重载。

    包含参数告诉 c++ 你正在重载后缀运算符。因此,当您运行 ++x 时,它将运行前缀,而 x++ 将运行后缀。

    我还可以补充一点,参数中的 int 不是整数数据类型。

    如果您想了解更多,那么我在这里找到了信息:https://www.programiz.com/cpp-programming/increment-decrement-operator-overloading

    【讨论】:

    • 感谢您的回答。但我仍然不相信。 ++x 和 x++ 都不需要参数。所以我仍然不确定 C++ 在调用这些方法时如何区分。
    • @Mohammad 我刚刚添加了我的来源,以便您可以阅读更多信息
    • 但本质上 int 实际上并不是一个参数。它是 C++ 的一个指标,表明您正在使用后缀。对不起,如果我写的没有传达这一点。
    • @Mohammad:它之所以有效,是因为 C++ 语言它有效。 C++ 语言说它将对++x 的调用转换为对不带参数的调用。 C++ 语言说它将对x++ 的调用转换为对具有int 类型的单个参数的调用。这就是它的工作原理。
    • 谢谢@NicolBolas。我现在明白了。
    猜你喜欢
    • 2020-02-08
    • 2023-03-13
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2011-10-27
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多