从类类型到某种数据类型
转换函数必须是类的成员函数;不能指定返回值类型;不能有参数。
编译器根据等号(赋值号)左边变量的数据类型,决定调用哪个转换函数。
例子:
int ii=girl; // 隐式转换。
int ii=(int) girl; // 显式转换。
int ii=int(girl); // 显式转换。
隐式转换
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
class CGirl // 超女类CGirl。
{
public:
int m_bh; // 编号。
string m_name; // 姓名。
double m_weight; // 体重,单位:kg。
// 默认构造函数。
CGirl() { m_bh = 8; m_name="西施"; m_weight = 50.7; }
//转换函数
operator int() { return m_bh; }
operator string() { return m_name; }
operator double() { return m_weight; }
};
int main()
{
CGirl g;
int a = g; cout<<"a的值为:"<<a<<endl;
string b = g; cout<<"b的值为:"<<b<<endl;
double c = g; cout<<"c的值为:"<<c<<endl;
}
显示转换
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
class CGirl // 超女类CGirl。
{
public:
int m_bh; // 编号。
string m_name; // 姓名。
double m_weight; // 体重,单位:kg。
// 默认构造函数。
CGirl() { m_bh = 8; m_name="西施"; m_weight = 50.7; }
//转换函数
operator int() { return m_bh; }
operator string() { return m_name; }
operator double() { return m_weight; }
};
int main()
{
CGirl g;
int a = (int)g; cout<<"a的值为:"<<a<<endl;
string b = (string)g; cout<<"b的值为:"<<b<<endl;
double c = (double)g; cout<<"c的值为:"<<c<<endl;
}
explicit关键字
在C++98中,关键字explicit不能用于转换函数,但C++11消除了这种限制,可以将转换函数声明为显式的。
int的隐式转换就不行了,就用了double的隐式转换函数。。。。
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
class CGirl // 超女类CGirl。
{
public:
int m_bh; // 编号。
string m_name; // 姓名。
double m_weight; // 体重,单位:kg。
// 默认构造函数。
CGirl() { m_bh = 8; m_name="西施"; m_weight = 50.7; }
//转换函数
explicit operator int() { return m_bh; }
operator string() { return m_name; }
operator double() { return m_weight; }
};
int main()
{
CGirl g;
int a = g; cout<<"a的值为:"<<a<<endl;
string b = g; cout<<"b的值为:"<<b<<endl;
double c = g; cout<<"c的值为:"<<c<<endl;
}
string类的类型转换
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
int main()
{
cout<<"char* 转换为string类"<<endl;
string name = "西施";
cout<<"string类转换为char* "<<endl;
const char* ptr =name.c_str();
}