-减去C ++中的一元运算符重载

拉海尔·阿萨德(Raheel Asad)
#include <iostream>
#include<conio.h>
using namespace std;

class Distance {
   private:
      int feet;             // 0 to infinite
      int inches;           // 0 to 12
   public:
   // required constructors
      Distance(){
        feet = 0;
        inches = 0;
     }
     Distance(int f, int i){
        feet = f;
        inches = i;
     }
     // method to display distance
     void displayDistance() {
         cout << "F: " << feet << " I:" << inches <<endl;
     }
     // overloaded minus (-) operator
     Distance operator- () {
        feet = -feet;
        inches = -inches;
       // return Distance(feet, inches);
     }
};

int main() {
   Distance D1(11, 10), D2(-5, 11);

   -D1;                     // apply negation
   D1.displayDistance();    // display D1

   -D2;                     // apply negation
    D2.displayDistance();    // display D2

   return 0;
}

我是初学者,学习C ++重载运算符函数。这段代码实际上运行良好,但是第一步,我对// return Distance(feet, inches);在程序中以注释的形式声明此语句并不感到困惑,但是输出仍然是正确的。但是,如果我运行程序时未对其进行注释,则该程序也可以正常运行,而不是该语句使用的目的是什么?第二,构造函数是否返回值?第三,它如何返回值我的意思是它不是变量我一直听说我们可以从变量返回值?

名称

如果我在未注释的情况下运行程序,则该程序也可以正常运行,而该语句的用途是什么?

来自[stmt.return]

从构造函数,析构函数或具有cv void返回类型的函数的末尾流出就等于没有操作数的返回。否则,从main([basic.start.main])以外的函数的末尾流出会导致未定义的行为。

您的程序导致未定义的行为,任何事情都可能发生。

第二,构造函数是否返回值?

我认为您的意思是:

return Distance(feet, inches);

该行返回prvalueDistance其中a是从feet构造的inches该值应该可以进行复制删除,并且可以保证从C ++ 17的复制中删除该值。

第三,它如何返回值我的意思是它不是变量我一直听说我们可以从变量返回值?

从上述的[stmt.return]中,重点是我的:

return语句的expr-or-braced-init-list称为其操作数。没有操作数的return语句只能在返回类型为cv void,构造函数([class.ctor])或析构函数([class.dtor])的函数中使用。操作数类型为void的return语句只能在返回类型为cv void的函数中使用。带有任何其他操作数的return语句只能在返回类型不是cv void的函数中使用;return语句通过操作数的复制初始化([dcl.init])初始化(显式或隐式)函数调用的glvalue结果或prvalue结果对象[注意:如果return语句不是prvalue或其类型与函数的返回类型不同,则return语句可能涉及对构造函数的调用以执行操作数的复制或移动。如果返回了自动存储持续时间变量([class.copy]),则可以取消与return语句关联的复制操作或将其转换为move操作。—尾注] [示例:

 std::pair<std::string,int> f(const char* p, int x) {
     return {p,x};
 }

return语句应采用以下形式:

return; // for void and constructor, destructor

或者

return expression-or-braced-init-list;

无论如何,我认为您的减号运算符应如下所示:

 Distance operator- () {
    return Distance(-feet, -inches);
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#自定义一元运算符重载

来自分类Dev

简略示例中的C#误解++一元运算符增量

来自分类Dev

如何在C#中重载一元运算符=。它给错误

来自分类Dev

<< C ++中的运算符重载错误

来自分类Dev

运算符* = C ++中的重载

来自分类Dev

C中的条件运算符一元

来自分类Dev

C ++中的重载运算符<

来自分类Dev

C ++中的重载运算符-> *

来自分类Dev

C中的赋值运算符重载

来自分类Dev

C ++中的运算符重载失败

来自分类Dev

在C ++中将任意位置运算符转换为一元运算符

来自分类Dev

C ++中的运算符重载

来自分类Dev

如何在C ++中重载一元和二进制减号运算符?

来自分类Dev

C ++是否可以重载右值引用的一元减运算符?

来自分类Dev

一元减号运算符如何在C ++中与整数文字一起使用?

来自分类Dev

C2675一元运算符由错误的范围引起

来自分类Dev

C ++中的重载运算符

来自分类Dev

简略示例中的C#误解++一元运算符增量

来自分类Dev

如何在C#中重载一元运算符=。它给了错误

来自分类Dev

C ++中涉及一元运算符的表达式求值

来自分类Dev

C ++中的重载运算符=

来自分类Dev

C中的一元运算符取反不起作用

来自分类Dev

C ++中重载的==和!=运算符

来自分类Dev

在C ++中将任意位置运算符转换为一元运算符

来自分类Dev

如何在C ++中重载一元和二进制减号运算符?

来自分类Dev

在C ++中重载运算符

来自分类Dev

C ++类上使用的一元运算符是什么意思?(类::类)

来自分类Dev

在 C++ 中重载 `=` 运算符

来自分类Dev

C 运算符优先级,a++ && b++ 中的逻辑 vs 一元|| ++c