Class隐形类型转换的几种用法
2010-02-05 16:21
197 查看
在C++编程中class的隐形类型转换一般是不建议使用的,主要还是出于使用的安全性。但是什么都有例外,在有的时候使用class的隐形类型
转换会为代码编写和阅读带来很多方便性。
实现外部值与内部值之间的自动转换
在我们编程的过程中往往会发生标识一条数据外使用的值与内部使用的值并不相同。比如一个数据库管理类(CDbMng),可能在内部是通
过Id来标识一个用户,但是用户信息管理类(CUserInfo)和用户关系管理类(CRelation)对用户的标识是通过用户名称来实现的,所以这个
时候CDbMng向CUserInfo、CRelation所提供的方法所有涉及到用户标识的都定义成CNameToId类型,实现用户名称标识到Id标识的自动转换
实现不同变量、不同类之间的相互运算
在我们编程的过程中有时候要求提供不同变量、不同类之间相互运算的功能。比如一个人员管理的类CPersonnelMng,并且该类提供一个
查询当前人员总数的函数。要求实现CPersonnelMng和一个整数相加返回一个整数,就可以如下实现:
class CPersonnelMng
{
public:
CPersonnelMng(int nPersonnelNum){ m_nPersonnelNum = nPersonnelNum;}
virtual ~CPersonnelMng(){}
public:
int GetPersonnelNum(){return m_nPersonnelNum;}
private:
int m_nPersonnelNum;
};
int GetTotalnPersonnelNum(CPersonnelMng oFirstPersonnel, CPersonnelMng oSecPersonnel)
{
return oFirstPersonnel.GetPersonnelNum() + oSecPersonnel.GetPersonnelNum();
}
int main()
{
CPersonnelMng oPersonnelMng(2);
int nTotalNum;
nTotalNum = GetTotalnPersonnelNum(1, oPersonnelMng);
printf("%i/r/n", nTotalNum);
return 0;
}
实现宽字符与窄字符之间的自动转换
在我们编程的过程中有时使用到了一些第三方库,而这些库使用的字符类型和我们自己的并不相同,比如我们使用的是宽字符,而第三方库
使用的是窄字符,这个时候我们可以考虑对这个第三方库进行封装,对所以函数的字符传入定义转换类CTranChar,这样就很方便的把宽字符
转换成第三方所适应的窄字符。
转换会为代码编写和阅读带来很多方便性。
实现外部值与内部值之间的自动转换
在我们编程的过程中往往会发生标识一条数据外使用的值与内部使用的值并不相同。比如一个数据库管理类(CDbMng),可能在内部是通
过Id来标识一个用户,但是用户信息管理类(CUserInfo)和用户关系管理类(CRelation)对用户的标识是通过用户名称来实现的,所以这个
时候CDbMng向CUserInfo、CRelation所提供的方法所有涉及到用户标识的都定义成CNameToId类型,实现用户名称标识到Id标识的自动转换
实现不同变量、不同类之间的相互运算
在我们编程的过程中有时候要求提供不同变量、不同类之间相互运算的功能。比如一个人员管理的类CPersonnelMng,并且该类提供一个
查询当前人员总数的函数。要求实现CPersonnelMng和一个整数相加返回一个整数,就可以如下实现:
class CPersonnelMng
{
public:
CPersonnelMng(int nPersonnelNum){ m_nPersonnelNum = nPersonnelNum;}
virtual ~CPersonnelMng(){}
public:
int GetPersonnelNum(){return m_nPersonnelNum;}
private:
int m_nPersonnelNum;
};
int GetTotalnPersonnelNum(CPersonnelMng oFirstPersonnel, CPersonnelMng oSecPersonnel)
{
return oFirstPersonnel.GetPersonnelNum() + oSecPersonnel.GetPersonnelNum();
}
int main()
{
CPersonnelMng oPersonnelMng(2);
int nTotalNum;
nTotalNum = GetTotalnPersonnelNum(1, oPersonnelMng);
printf("%i/r/n", nTotalNum);
return 0;
}
实现宽字符与窄字符之间的自动转换
在我们编程的过程中有时使用到了一些第三方库,而这些库使用的字符类型和我们自己的并不相同,比如我们使用的是宽字符,而第三方库
使用的是窄字符,这个时候我们可以考虑对这个第三方库进行封装,对所以函数的字符传入定义转换类CTranChar,这样就很方便的把宽字符
转换成第三方所适应的窄字符。
相关文章推荐
- 黑马程序员几种常见的转换类型特点及用法总结
- 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”
- 类型<T> where T:class的用法
- C++中class的类型转换重载
- 几种数据类型与byte转换方式
- Java中几种常用数据类型之间转换的方法
- 几种常见类型的转换
- C++ 类型转换的特殊用法
- Hibernate Annotation关系映射的几种类型映射用法及使用方法
- 【C#数据类型转换的几种形式】
- 把传过来的Object对象转换成Collection类型的对象。isArray()方法,判定此Class对象是否表示一个数组类。java.lang.reflect.Array 对任意数组进行操作
- C++ 中operator用法:隐式类型转换
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLInputElementClass
- 无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]
- Oracle中数组类型的几种用法
- c#中数组,类型转换,using语句的其他用法
- 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Wor
- 解决spring使用动态代理类型转换失败的问题--java.lang.ClassCastException: com.sun.proxy.$Proxy$ cannot be cast to ...今天
- 03_模板、类型转换、新数组、Lamdbda表达式、New高级用法