我的问题是关于c ++中的数据类型转换。 c ++是否为内置数据类型(int,float)提供了对用户定义数据类型的隐式转换?
在下面的例子中,我试图添加一个带有测试对象类型的double(t4 = t3 + 1.0),并且使用+运算符正常工作,那么是否隐式转换为测试类型对象?
class test {
double d;
int m;
public:
test()
{
d=0;
m=0;
}
test(double n)
{
d=n;
}
const test operator+(const test& t)
{
test temp;
temp.d = d+ t.d;
return temp;
}
};
int main()
{
test t1(1.2);
test t2(2.5);
test t3, t4;
t3= t1+ t2;
t4 = t3 + 1.0;
return 0;
}
答案 0 :(得分:0)
构造函数test(double n)
声明从double
到test
的隐式转换。通常,任何可以使用一个参数(包含可以接受更多参数但具有默认值的构造函数)可调用的构造函数都可以用作隐式转换,除非它被标记为explicit
:< / p>
struct Foo {
Foo(int x); // implicit conversion from int to Foo
explicit Foo(char c); // marked explicit - no implicit conversion
Foo(std::string a, double pi = 3.14159); // can be used as implicit
// conversion due to default
// argument
};
编辑: t4 = 1.0 + t3
不起作用,因为您已将operator+
重载为成员函数,因此仅考虑第一个操作数是否为类型test
- 在这种情况下不尝试隐式转换。为了使这项工作,让您的操作员成为一个自由的功能:
test operator+(const test& lhs, const test& rhs);
答案 1 :(得分:0)
是的,只要您的构造函数test(double)
不明确
// implicite convertible
test(double n)
{
d=n;
}
// not implicite convertible
explicit test(double n)
{
d=n;
}