C++结构方法语法
C++ - Structure Methods Syntax
当我尝试编译以下代码时,我遇到了一个奇怪的错误:我需要使用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
相关文章:
- 单独定义模板化嵌套类方法的正确语法
- 实例化对象并调用方法,使用单行语法在 C# 或 C++ 中返回值?
- std::is_invocable 用于测试任意方法是否存在的语法(不仅是运算符())
- 使用新的c++返回值语法的Const方法
- 模板化类和模板化方法的模板专用化语法
- 返回结构的方法的正确语法是什么
- C++方法与Java的比较(从Java到C ++的语法)
- C++中各种向量突变方法的语法
- 用于命名模板静态类方法的特定实例的语法
- 通过该类中定义的指针调用类方法时的语法
- 如何在源文件中定义类并将其声明在标题文件中(而不必使用`class :: method'语法定义类方法)
- C++ 模板方法语法问题
- 在不使用专用语法的情况下,为不同类型的不同方式实现模板类的方法是否有效C++?
- 模板类方法语法
- 我不明白的模板方法中的语法错误
- 未知的方法语法
- C++使用不同的类作为方法的'this'调用存储在类中的方法的正确语法是什么?
- 语法错误字符串方法C++
- C++:有没有一种有效的方法来语法上使用指针等索引
- 奇怪的c++语法方法声明