我构建一个Front对象,其中包含了显式转换、隐式转换、可调用对象。
class Front{
public:
explicit Front(string str):s(str){} //阻止隐式转换的构造函数
operator string()const { //potential change 隐式转换
return s;//返回要转换的成员
}
string get()const{ //explicit change 显式转换
return s;//返回要转换的成员
}
void operator ()()const{//可调用,后一个括号里放参数
cout<<" can be called "<<s<<endl;// can be called usage
}
private:
string s;
};
测试:
int main(){
using namespace std;
Front f("sd");//构造对象
//当构造函数为explicit时不能用 Front f="sd"![请添加图片描述](https://img-blog.csdnimg.cn/30a4d1f03c614a5294fc40e522219c45.png)
string o="he";
o+=f;//这里执行了隐式转换
cout<<"potential change : "<<o<<endl;
cout<<"can be called : ";
f();//可调用对象执行
cout<<"explicit change : "<<f.get()<<endl;
//用f.get()来显式的转换类型
}
执行结果: