C++类之外的运算符重载定义

C++类之外的运算符重载定义,c++,class,overloading,C++,Class,Overloading,对不起,这是一个如此简单的问题。我一直在使用TutoRoSpPiTncom学习C++。目前我正在尝试学习类和操作符重载。对于其他成员功能,网站使用此约定 class Box { private: int Volume; public: Box(int num); ... } Box::Box(int num) { Volume = num; } 但是,当重载运算符时,它们使用 c

对不起,这是一个如此简单的问题。我一直在使用TutoRoSpPiTncom学习C++。目前我正在尝试学习类和操作符重载。对于其他成员功能,网站使用此约定

    class Box {
     private:
      int Volume;
     public:
      Box(int num);
      ...
     }
     Box::Box(int num) {
      Volume = num;
     }
但是,当重载运算符时,它们使用

     class Box {
      private:
       int volume;
      public:
       Box(int num);
       Box operator+(const Box &b) {
        Box box;
        box.volume = this->volume + b.volume;
        return box;
       }
      }
它们在类内定义重载函数。可以在类之外定义它吗?如果是,怎么做?我试过了

     Box Box::operator+(const Box &b) {...}
     Box::Box operator+(const Box &b) {...}
但是这些不起作用

我在课外怎么做

再次抱歉,这是一个如此简单的问题。 谢谢

编辑 我的代码如下所示

#include <iostream>
#include <string>
using namespace std;

class Box {
 private:
  int volume;
 public:
  Box(int num);
  Box operator+(const Box &b);
};

Box::Box(int num) {
 volume = num;
}

Box Box::operator+(const Box &b) {
 Box box;
 box.volume = this->volume + b.volume;
 return box;
}

int main() {
 Box one(2);
 Box two;
 two = one + one;  
}

是的,只要有可能,在类之外定义运算符是可能的,也是常见的。 你想要这个:

Box operator+( const Box& left, const Box& right ) { ... }
编辑:

如果您的意思是要将运算符声明为成员函数并在cpp中的其他位置定义它,则它是:

h

cpp

编辑2:
现在你已经发布了你的错误。创建框2时,您正试图使用默认构造函数;但是,由于您在int中创建了一个非默认构造函数,编译器不会为您生成默认构造函数。

错误消息与运算符重载无关,它只是抱怨Box没有默认构造函数,即Box::Box用于语句框;和方框二

您可以为其添加默认构造函数,例如:

class Box {
 private:
  int volume;
 public:
  Box() : volume(0) {}
  ~~~~~~~~~~~~~~~~~~~~
  Box(int num);
  Box operator+(const Box &b);
};
Box box(0);
或更改语句以指定参数,例如:

class Box {
 private:
  int volume;
 public:
  Box() : volume(0) {}
  ~~~~~~~~~~~~~~~~~~~~
  Box(int num);
  Box operator+(const Box &b);
};
Box box(0);

第一个应该可以。你说不工作是什么意思?有错误信息吗?当你说这些不起作用时,你是什么意思?你有生成错误吗?意外的结果?还有别的吗?请详细说明,并给我们更多的细节,包括构建错误,如果你有。我想OP是指成员功能。谢谢。我认为,如果没有定义默认构造函数,编译器会自行将成员变量设置为默认值。e、 g.所有整数都默认为0,所有指针都为NULL,等等。
Box box(0);