[英]Why isn't the conversion constructor called?
我做了一个简单的类,只是为了尝试使用C ++进行转换的构造函数。
它显然可以工作,但是当执行某些操作时,似乎编译器没有调用它。 我会知道为什么,或者我错了。
#include <iostream>
using std::cout; using std::endl;
class CostruttoreConversione
{
public:
CostruttoreConversione(int val = 0)
{
cout << "Costruttore chiamato" << endl;
valore = val;
}
inline int getValore(){
return valore;
}
CostruttoreConversione provaConversioneImplicita()
{
return -10; //here the type *should* be converted; doesn't happen.
}
private:
int valore;
};
int main(void){
CostruttoreConversione obj(10);
cout << "obj = " << obj.getValore() << endl;
obj = 20; //WORKS
cout << obj.getValore() << endl;
// cout << obj.provaConversioneImplicita() << endl; doesn't work.
return 0;
}
构造应该可以工作,但是输出操作失败,因为您尚未为类定义输出操作符。
你仍然可以做例如
cout << obj.provaConversioneImplicita().getValore() << endl;
或者您定义一个输出运算符:
inline std::ostream& operator<<(std::ostream& os, const CostruttoreConversione& cc)
{
os << cc.getValore();
return os;
}
您可以重载转换运算符,以便CostruttoreConversione可以转换为int。
class CostruttoreConversione{
operator int() const{
return valore;
}
}
还写一个拷贝构造函数
默认构造函数和参数化构造函数共同构成一个转换构造函数。 例如,如果您正在编写用于创建ADT数组的程序,则在函数main中声明数据类型为array的变量时,main调用参数化构造函数,该构造函数会将数组转换为用于开发数组的数据类型。 因此,间接转换正在发生。 因此,不会调用转换构造函数。 但是默认值和参数化的构造函数在内部进行转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.