首页 > 代码库 > C++学习笔记33 转换运算符

C++学习笔记33 转换运算符

有时候我们想将一个类类型转换为另一个类类型,同时,这两个类并不存在继承关系,这时候我们就需要一种叫做转换运算符的运算符.
一个简单的例子.要将类A转换为int类型
#include <iostream> 
#include <string> 
using namespace std; 
class A{ 
private: 
int n; 
string str; 
public: 
A(int m,string s):n(m),str(s){ 

}; 
int main(){ 
A a(10,"hello"); 
int m=a; 
cout<<"m="<<m<<endl; 
//string s=a; 
//cout<<"s="<<s<<endl; 
 
}
编译结果


可能你想将其强制转换.例如
int m=(int)a;
结果还是不行,因为编译器依然不知道应该怎么转换.


这时候,就需要转换运算符了.
这个转换运算符的类型如下:
operator int ()const{
return n;
}
函数名为operator int ,这个函数是没有返回类型的,因为返回类型是通过运算符的名称确定的:int
同时应声明为const,因为不会修改被调用的对象.
整个程序如下:
#include <iostream> 
#include <string> 
using namespace std; 
class A{ 
private: 
int n; 
string str; 
public: 
A(int m,string s):n(m),str(s){ 

operator int ()const{ 
return n; 

operator string()const{ 
return str; 

}; 
int main(){ 
A a(10,"hello"); 
int m=a; 
cout<<"m="<<m<<endl; 
string s=a; 
cout<<"s="<<s<<endl; 
 
}

运行结果:


类类型转换为基本类型是这样,同样,转换为其他类类型也是同样的道理.
#include <iostream> 
#include <string> 
using namespace std; 
class A{ 
private: 
int n; 
string str; 
public: 
A(int m,string s):n(m),str(s){ 

A(string s){ 
str=s+" is called!"; 

operator int ()const{ 
return n; 

operator string()const{ 
return str; 

void show()const{ 
cout<<"str="<<str<<endl; 

}; 
class B{ 
private: 
string s; 
public: 
B(string str):s(str){ 

operator A()const{ 
return s; 



}; 
int main(){ 
 
B b("this is b "); 
A a=b; 
a.show(); 
 
}
结果:


这样,我们就可以对不是同一条继承链上的类进行转换了!