C++结构方法语法

C++ - Structure Methods Syntax

本文关键字:语法 方法 结构 C++      更新时间:2023-10-16

当我尝试编译以下代码时,我遇到了一个奇怪的错误:我需要使用structs(我被教过使用structkeywor的类,我正试图通过这种方式学习它。我还需要将函数定义放在structblock之外。

#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;
}

有人能帮我吗?感谢

属于类/结构的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)

这是您修改过的代码。由于编译器没有使用NRVO,我不得不将运算符重载放入结构中(请参阅此处)

#include <iostream>
#include <string>
using namespace std;
struct Box {
    int l;
    int w;
    Box();
    Box(int a, int b);
    int area();
    Box operator+(const Box a)
    {
      return Box(a.l + l, a.w + w);
    }
};

Box::Box() {
    l = 0;
    w = 0;
}
Box::Box(int a, int b) {
    l = a;
    w = b;
}

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;
}

结果:

Total area is: 2 + 12 = 24