C/C++ 运算符重载、数据类型转换
1.运算符就是“+”、“>>”等符号,对运算符重载实质就是对函数的重载,这样运算符就能在原有基础上增加新功能,不能自己定义新运算符,只能对已有运算符重载,重载运算符后不能改变运算符本身的特性,比如优先级,运算数个数等;
2.运算符重载格式:
函数类型 operator 运算符名称(形参表)
{
//具体操作
}
e.g.complex operator +(complex &c1,complex &c2)
operator是关键字,函数名由operator和运算符共同组成,如”operator +”。
3.不能重载的5个运算符:“.”、“*”、“::”、“sizeof”、“?:”。
4.对运算符重载的函数有两种方式:类成员函数、类友元函数。
类成员函数:complex operator +(complex &c1)
这样就可以直接c1+c2了,相当于是c1.operator+(c2),operator+就是c1的成员函数,因为可以通过this指针访问类的数据成员,所以可以少写一个函数参数,第一个参数必须为本类对象。
类友元函数:complex operator +(complex &c1,complex &c2)
这样c1+c2相当于是operator+(c1,c2)
如果不用友元,则重载的运算符函数无权访问类的私有成员,所以要用友元。
因为友元会破坏类的封装,所以尽量将运算符函数作为类的成员。一般来说,双目运算符为友元,单目和复合运算符为成员函数。
5.数据类型显式转换:
c风格:(int)12.3=12
c++风格:int(12.3)=12
6.构造函数转换数据类型,重载构造函数即可。
7.类型转换函数:
格式:operator 返回类型()//一般是在类内部写的,
{
//实现转换的语句
}
e.g.
class A
{
public:
int a;
A(int x) :a(x) {}
operator int()
{
return a;
}
};
int main()
{
A haha(2);
int b = haha + 3;
A c = haha + 4;
cout<<b<<"\n"<<c.a<<endl;
return 0;
//结果输出5和6
}
作用:将自定义数据类型转换为标准数据类型。
最新文章
- win7系统c盘瘦身,去虚拟内存方式
- 【01-05】hibernate BaseDao
- 特征描述算子-sift
- APACHE POI教程 --java应用程序用POI与Excel交互
- bzoj 2659: [Beijing wc2012]算不出的算式
- JAX-WS(二)之使用wsimport创建WebService客户端
- Parse和Convert的区别
- 顶尖大数据挖掘实战平台(TipDM-H8)产品白皮书
- Javaweb统计在线人数的小栗子
- Linux如何正确关机
- JVM 堆内存,参数优化
- VS2005 与虚拟机的那点事
- 服务器告警其一:硬盘raid问题
- Django 执行单独脚本及SyntaxError缩进报错解决
- linux中,当执行rpm -e删除一个软件包时,都做了些什么事
- dbeaver导出MySQL的架构提示";IO Error: Utility &#39;mysqldump.exe&#39; not found in client home &#39;MySQL Connector/Net";解决方案
- Web Service进阶
- 【WEB前端开发最佳实践系列】CSS篇
- 如何在cmd命令行中查看、修改、删除与添加环境变量,语法格式例子:set path;echo %APPDATA%
- mysql 存入乱码问题