Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何重载C++;对于具有2个变量的对象?_C++_Operator Overloading - Fatal编程技术网

C++ 如何重载C++;对于具有2个变量的对象?

C++ 如何重载C++;对于具有2个变量的对象?,c++,operator-overloading,C++,Operator Overloading,所以我一直都有操作符重载的问题。所以我有一个程序,它有一个名为“重量”的对象,它有两个属性,磅和盎司。我算出了所有其他运算符,但增量运算符一直给我带来麻烦。我试图这样做,但出于某种原因,它不想工作 以下是头文件中的声明(包括2个变量): 成员的职能是: void Weight::operator++(){ 磅+1; 盎司+15; } void Weight::运算符--(){ 磅-1; 盎司-15; } 什么都行 发布的代码有两个问题 当您增加或减少对象的重量时,不清楚会发生什么情况。它的价

所以我一直都有操作符重载的问题。所以我有一个程序,它有一个名为“重量”的对象,它有两个属性,磅和盎司。我算出了所有其他运算符,但增量运算符一直给我带来麻烦。我试图这样做,但出于某种原因,它不想工作

以下是头文件中的声明(包括2个变量):

成员的职能是:

void Weight::operator++(){
磅+1;
盎司+15;
}
void Weight::运算符--(){
磅-1;
盎司-15;
}

什么都行

发布的代码有两个问题

  • 当您增加或减少
    对象的重量时,不清楚会发生什么情况。它的价值应该上升/下降一盎司还是一磅

  • 表达式
    磅+1
    盎司+15
    等不会改变对象中的任何内容。它们计算一个值,结果被丢弃

  • 假设INRENT运算符将值更改一盎司,则必须使用:

    void Weight::operator++() {
        ounces++;
    
        // If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
        if ( ounces == 16 )
        {
            pounds++;
            ounces = 0;
        }
    
        // That can also be achieved by using.
        // pounds += (ounces / 16);
        // ounces =  (ounces % 16);
    }
    
    另外,重载
    ++
    操作符的cannonical实践是返回对对象的引用。因此,您应该使用:

    Weight& Weight::operator++() {
        ounces++;
    
        // If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
        if ( ounces == 16 )
        {
            pounds++;
            ounces = 0;
        }
    
        // That can also be achieved by using.
        // pounds += (ounces / 16);
        // ounces =  (ounces % 16);
    
        return *this;
    }
    

    您必须以类似方式更新
    运算符--
    函数。

    推荐阅读:这与重载增量运算符无关。这是一个关于如何向变量添加内容的基本问题。增量应该是什么?现在你的体重增加了将近2磅。如果按点递增,则很容易。只需增加
    ,而不增加
    盎司
    。如果按盎司增加,则增加
    盎司
    ,如果达到16,则将
    盎司
    重置为0,并增加
    。注:如果我错了,每磅16盎司,好吧。我住在公制国家。@tkausl主要问题与过载无关,但Tilak的返回类型错误,因此迟早会有错误的行为<代码:你第一个错误是认为C++需要适当的分数。没有。如果您使用盎司的总数来存储和计算,一切都会变得更容易。只有为了展示的目的,你才需要把100盎司分成6磅4盎司。剩下的时间里,甚至可能没有一磅单位。
    Weight& Weight::operator++() {
        ounces++;
    
        // If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
        if ( ounces == 16 )
        {
            pounds++;
            ounces = 0;
        }
    
        // That can also be achieved by using.
        // pounds += (ounces / 16);
        // ounces =  (ounces % 16);
    
        return *this;
    }