C ++ - 结构方法语法

时间:2015-11-01 04:16:29

标签: c++ struct operator-overloading

当我尝试编译以下代码时出现一个奇怪的错误: 我需要使用结构(我用struct keywor教我的类,并试图以这种方式学习它。我还需要将函数定义放在struct块之外。

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

struct Box {
 int l;
 int w;
 int area();
 Box();
 Box(int a, int b);
 Box operator+(const Box a, const Box b);
};

Box::Box() {
 l = 0;
 w = 0;
}
Box::Box(int a, int b) {
 l = a;
 w = b;
}
Box Box::operator+(const Box a, const Box b) {
 Box box(a.l + b.l, a.w + b.w);
 return box;
}
int Box::area() {
 return l * w;
}
int main() {
 Box a(1, 2);
 Box b;
 b.l = 3;
 b.w = 4;
 Box c = a + b;
 cout << "Total area is: " << a.area() << " + " << (b.area) << " = " << (c.area) << endl;
}

有人可以帮帮我吗?感谢

2 个答案:

答案 0 :(得分:0)

属于类/结构的

operator+应该只接收一个Box类型的参数(从+的右侧),它应该被添加到当前对象中(从+的左侧) ):

Box Box::operator+(const Box& a) {
    Box box(a.l + l, a.w + w);
    return box;
}

同样在cout行,它应该是b.area()c.area(),而不是(b.area)(c.area)

答案 1 :(得分:0)

这里修改了一些代码。由于编译器不使用NRVO,我不得不将运算符重载放入结构中(参见here

Total area is: 2 + 12 = 24

结果:

{{1}}