C++类之外的运算符重载定义
对不起,这是一个如此简单的问题。我一直在使用TutoRoSpPiTncom学习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
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);