关于C++中的类型转换函数
函数原型
C++里面每个类型(class or struct)都可以定义自己的成员函数(方法)以及成员变量(属性),这些都是很常见基本的东西,类似的java,C#或者任何一种OOP都应该有的东西。
关于函数其中有一点比较重要的便是其函数原型,例如:
Prototype: ReturnType FunctionName(ArgumentList) Example: int sum(int valueA, int valueB)
部分语言针对有返回值和无返回值的函数处理不一样,比如VB里面有Function和Sub之分,后者无返回值。
多数语言里面支持函数重载,即可以定义的多个函数名相同,但是参数列表不同的函数,例如下面两个函数只是可以相互区别的:
int sum(int valueA, int valueB); float sum(float valueA, float valueB);
这是因为他们的全名其实并不只是sum,而是sum_int_int和sum_float_float,当然这不一定是具体的名字,看编译器心情而定。
运算符函数
在C++里面除了这些普通的函数以外,还有一些特别的函数看上去没有遵守上面的格式,比如类(以及结构体)的构造、析构函数,以及运算符重载函数。
构造析构不必赘述,运算符重载函数有它们自己比较特别的表现形式,例如:
class FooClass
{
public:
FooClass(int value) : m_value(value)
{
}
int operator + (const FooClass& rightValue)
{
return m_value + rightValue.m_value;
}
private:
int m_value;
}
FooClass objectA(10);
FooClass objectB(20);
int valueC = objectA + objectB;
这时便可以简单的使用加号运算符(+)来求得对象objectA和objectB内部的m_value相加之和。当然如果你不喜欢这样也完全可以给FooClass加上一个Add之类的方法然后调用:
valueC = objectA.Add(objectB);
类型转换运算符
好了,废话那么多,下面开始进入重点了。
关于运算符的重载,并不只是简单的若干内建运算符(+,-,*,/ etc.)。有一种特殊的运算符叫类型转换运算符(姑且这样叫吧,只是我目前还没找到合适的名字-_-)。他们的形式大约是:
class FooClass
{
public:
operator int ()
{
return m_value;
}
private:
int m_value;
}
注意他们的特别之处在于:
- 没有返回值
- 没有参数
- 函数名即是类型名
这个函数可以理解成:有这么样一个运算符,可以把FooClass类型的对象转换为int类型的数值。
于是便可以简单的使用以下的代码来将对象objectA里面的m_value的值赋予外部的int类型变量valueC。
FooClass objectA(10); int valueC = objectA;
编译器会自动搜索合适的类型转换函数并进行链接。
其实这样的用法不知不觉种已经用了很多,当你在把一个int的数值赋值给float的时候,编译器已经会自动链接int类型内建的向float的类型转换函数了,反之亦然。
当然标准的用法应该写作:
int valueC = static_cast<int>(objectA);
先写这么多,下回继续。
June 28th, 2010 - 21:03
好技术~~~~
June 28th, 2010 - 22:47
那必须的~~
June 28th, 2010 - 23:18
哟~ C++哟,看不懂哟