一般来说,类对象的类型转换可由构造函数和转换函数说明。这种转换常称为用户定义的类型转换或类类型转换。C++支持四种类型转换,标准类型-》标准类型,标准类型-->类类型,类类型-->标准类型,类类型-->类类型。标注类型是除了class,struct,union之外的所有其他类型。
1.标准类型转换为类类型
可通过自定义重载赋值号“=”和构造函数实现
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
class INTEGER
{
int num;
public:
INTEGER(int i);
INTEGER(const char *str);
void mem_fun(INTEGER anint);
};
INTEGER::INTEGER(int i)
{
num = i;
}
INTEGER::INTEGER(const char *str)
{
num = strlen(str);
}
void INTEGER::mem_fun(INTEGER anint)
{
num = anint.num;
}
int main(int argc,char *argv[])
{
INTEGER obj1 = INTEGER(1);
INTEGER obj2 = "Beijing";
int anint = 10;
INTEGER obj3 = INTEGER(anint);
obj1 = 20;//隐式转换,将1转换为INTEGER型,obj1.operator=(INTEGER(20));编译器尝试用构造函数去实现转换。
obj2.mem_fun(3);//同上,将3->INTEGER
cout << "Application Run Successfully!" << endl;
return 0;
}
2.类类型转换
带一个参数的构造函数可以进行类型转换,但这样的转换功能收到限制。因此需要引入一种特殊的成员函数:类型转换函数,他在类对象之间提供一种类似显示类型转的机制。格式:
Class_Name::operator type()
{
......
return (type类型实例);
}
类型转换函数不能被重载,没有参数,没有返回值,但必须有一条返回语句返回一个type实例。
如:类类型转换为整形
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
class INTEGER
{
int num;
public:
INTEGER(int i=0)
{
num = i;
}
operator int()
{
return num;
}
};
int main(int argc,char *argv[])
{
INTEGER obj(12);
int i = int(obj);
cout << i << endl;
i = (int)obj;
cout << i << endl;
i = obj;
cout << i << endl;
cout << "Application Run Successfully!" << endl;
return 0;
}
如:类类型转换为类类型
定义一个类integer,它可以处理32位整数,同时定义另一个类real,它可以处理32位实数。
联系客服