c 语言函数类型转换,C++中Operator类型强制转换成员函数解析

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:

class

{

public:

operator ();

}

这个转换函数定义了由到之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。

1.operator用于类型转换函数:

类型转换函数的特征:

1) 型转换函数定义在源类中;

2) 须由 operator 修饰,函数名称是目标类型名或目标类名;

3) 函数没有参数,没有返回值,但是有return 语句,在return语句中返回目标类型数据或调用目标类的构造函数。

类型转换函数主要有两类:1) 对象向基本数据类型转换:

#include

#include

using namespace std;

class D{

public:

D(double d):d_(d) {}

operator int() const{

std::cout<

return static_cast(d_);

}

private:

double d_;

};

int add(int a,int b){

return a+b;

}

int main(){

D d1=1.1;

D d2=2.2;

std::cout<

system("pause");

return 0;

}

结果:

4599e04c5b0df11f70f9b7a56074f47d.png

可见在add(d1,d2)函数调用时隐性地调用了operator int() const 函数。

2)对象向不同类的对象的转换:

#include

class X;

class A

{

public:

A(int num=0):dat(num) {}

A(const X& rhs):dat(rhs) {}

operator int() {return dat;}

private:

int dat;

};

class X

{

public:

X(int num=0):dat(num) {}

operator int() {return dat;}

operator A(){

A temp=dat;

return temp;

}

private:

int dat;

};

int main()

{

X stuff=37;

A more=0;

int hold;

hold=stuff;

std::cout<

more=stuff;

std::cout<

return 0;

}

49576b5e507cf3dde6120c451b722441.png

上面这个程序中X类通过“operator A()”类型转换来实现将X类型对象转换成A类型。

2.operator 用于操作符重载:

操作符重载的概念:将现有操作符与一个成员函数相关联,并将该操作符与其成员对象(操作数)一起使用。

注意事项:

1) 重载不能改变操作符的基本功能,以及该操作符的优先级顺序。

2) 重载不应改变操作符的本来含义。

3) 只能对已有的操作符进行重载,而不能重载新符号。

4) 操作符重载只对类可用。

5) 以下运算符不能被重载:

. 原点操作符(成员访问符)

* 指向成员的指针

:: 作用域解析符

? : 问号条件运算符

sizeof 操作数的字节数

操作符函数的一般格式:

return_type operator op(argument list);

return_type:返回类型(要得到什么)

op:要重载的操作符

argument list:参数列表(操作数有哪些)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值