通过具有重载运算符函数的构造函数自动进行类型转换
Automatic type conversion through constructors with overloaded operator functions
我遇到了麻烦。
#include <iostream>
#include <cstdlib>
using namespace std;
class rec
{
private:
float l;
float w;
public:
rec(): l(0) , w(0) {}
rec(float a)
{
l = a;
w = 0.0;
}
rec(float a, float b): l(a) , w(b) {}
friend rec operator +(rec& , rec&);
//friend rec operator +(float , rec&);
friend ostream& operator <<(ostream&, rec&);
};
ostream& operator <<(ostream& out , rec& r3)
{
out << "l " << r3.l << endl << "w " << r3.w;
return out;
}
int main()
{
rec r1(8, 3) , r2(2,7) , r3;
r3 = 5.0 + r2;
cout << "sum " << r3;
}
rec operator +(rec r1 , rec r2)
{
float lsum , wsum;
lsum = r1.l + r2.l;
wsum = r1.w + r2.w;
return rec(lsum , wsum);
}
我认为这里自动类型转换的目的是使r3 = 5.0 + r2其中 5.0 被视为在重载 + 和 <<函数中使用的对象,使友元 rec 运算符 +(float , rec&(;必要。也许我在这里错过了一些东西。
你的代码有两个问题。首先,friend rec operator +(rec& , rec&);
将声明一个operator+
,该对其参数进行非常量引用。通过构造函数从 float
转换为 rec
将生成临时引用,并且非常量引用不能绑定到临时引用。您应该通过按值或常量引用接受参数来修复它。
第二个问题是operator+
的定义与其当前的声明不匹配。
相关文章:
- 构造函数和转换运算符之间的重载解析
- C++无效的函数类型转换
- 元组尺寸默认构造函数及其转换为std :: size_t
- C++ 03 类模板 这是转换构造函数还是转换运算符?以及如何声明解决此问题的方法
- 是否可以将一种函数类型转换为另一种采用相同参数但返回类型不同的函数类型
- 调用构造函数或转换
- 需要构造函数/析构函数/类型转换错误
- 使用构造函数自动转换
- static_cast转换构造函数与转换运算符
- 构造函数和转换
- C++ - 打印地图<结构,结构,构造函数>类型
- 错误:从"<未解析的重载函数类型>"转换为非标量类型
- 有没有一种干净的方法可以将 C# 'params object[]' 构造函数参数转换为C++构造函数?
- 混淆了复制构造函数和转换构造函数
- C++11:在按值传递参数初始化时转换构造函数和转换函数之间的歧义
- 继承构造函数+非默认构造函数类型的类内初始化失败
- 特征日志和exp函数类型转换错误
- c++ python构造函数类型错误(可能的命名空间问题)
- 构造函数的转换不适用于运算符重载
- 具有构造函数类型转换和转换操作符的转换序列