对不起,这是一个简单的问题。我一直在使用tutorialspoint.com来学习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;
}
我的错误是
Overloading.cc: In member function 'Box Box::operator+(const Box&)':
Overloading.cc:18:6: error: no matching function for call to 'Box::Box()'
Overloading.cc:18:6: note: candidates are:
Overloading.cc:13:1: note: Box::Box(int)
Overloading.cc:13:1: note: candidate expects 1 argument, 0 provided
Overloading.cc:5:7: note: Box::Box(const Box&)
Overloading.cc:5:7: note: candidate expects 1 argument, 0 provided
Overloading.cc: In function 'int main()':
Overloading.cc:25:6: error: no matching function for call to 'Box::Box()'
Overloading.cc:25:6: note: candidates are:
Overloading.cc:13:1: note: Box::Box(int)
Overloading.cc:13:1: note: candidate expects 1 argument, 0 provided
Overloading.cc:5:7: note: Box::Box(const Box&)
Overloading.cc:5:7: note: candidate expects 1 argument, 0 provided
答案 0 :(得分:3)
是的,尽可能在类外定义运算符是可能的,也是常见的。 你想要这个:
Box operator+( const Box& left, const Box& right ) { ... }
修改强>
如果您的意思是要将运算符声明为成员函数并在其他地方(在cpp中)定义它,那么它是:
ħ
class Box
{
Box operator+( const Box& other ) const;
};
CPP
Box Box::operator+( const Box& other ) const { ... }
编辑2:
现在您已经发布了错误消息。您在创建Box two;
时尝试使用默认构造函数但是,由于您创建了非默认构造函数Box( int )
,因此编译器不会为您生成默认构造函数。
答案 1 :(得分:1)
错误消息与运算符重载无关,只是抱怨Box
没有语句Box::Box()
和{{Box box;
的默认构造函数(即Box two;
) 1}}。
您可以为其添加默认构造函数,例如:
class Box {
private:
int volume;
public:
Box() : volume(0) {}
~~~~~~~~~~~~~~~~~~~~
Box(int num);
Box operator+(const Box &b);
};
或更改语句以指定参数,例如:
Box box(0);