C++温故补缺(八):运算符重载和函数重载
运算符重载和函数重载
重载是c++多态性的一大体现,重载运算符是给运算符添加新的定义,使之前不能运算的对象变得可运算,且一般和运算符的意义相似.
函数重载主要是同名函数参数类型不同,参数个数不同,实现不同的功能
运算符重载
运算符重载一般作用于类的对象运算,因为它需要相同返回类型和参数,运算符重载依赖关键字operator
,格式:
返回类类型 operator<符号>(const 类&)
如Box operator+(const Box&)
例:
#include<iostream>
using namespace std;
class Box{
public:
int a;
Box operator+(const Box& b){
Box b1;
b1.a=this->a+b.a;
}
};
因为要用到this指针,所以运算符重载类中的,它的原理就是:
obj3=obj1+obj2
,obj1是发生重载的对象本身,用this调用其成员;obj2是传入const obj&对象,用形参名来调用成员,obj3就是返回值。
可重载的运算符和不可重载的运算符
- 可重载:
双目算术运算符 | + (加),-(减),*(乘),/(除),% (取模) |
---|---|
关系运算符 | ==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于) |
逻辑运算符 | |(逻辑或),&&(逻辑与),!(逻辑非) |
单目运算符 | + (正),-(负),*(指针),&(取地址) |
自增自减运算符 | ++(自增),--(自减) |
位运算符 | | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移) |
赋值运算符 | =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= |
空间申请与释放 | new, delete, new[ ] , delete[] |
其他运算符 | ()(函数调用),->(成员访问),,(逗号),[](下标) |
- 不可重载
.
:成员访问运算符
.*
, ->*
:成员指针访问运算符
::
:域运算符
sizeof
:长度运算符
?:
:条件运算符
#
: 预处理符号
运算符重载不止可以在类中实现,还可以在结构体中实现
#include<iostream>
using namespace std;
typedef struct test{
int a;
test operator+(const test& t){
test temp;
temp.a=t.a+this->a;
return temp;
}
}T;
int main(){
T t1,t2,t3;
t1.a=12;
t2.a=15;
t3=t1+t2;
cout<<t3.a;
}
函数重载
函数重载体现在相同的函数名和不同形参列表上,和java等都类似
如:
#include<iostream>
using namespace std;
void print(int a){
cout.precision(0);
cout<<a<<endl;
}
void print(float a){
cout.precision(2);
cout<<a<<endl;
}
void print(double a){
cout.precision(4);
cout<<a<<endl;
}
int main(){
float pi=3.1415926;
print(pi);
}
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/cppreview8.html